将List的前n个元素放入数组的最快方法
获取存储在数组中的列表的前n个元素的最快方法是什么?
将此视为场景:
int n = 10; ArrayList in = new ArrayList(); for(int i = 0; i < (n+10); i++) in.add("foobar");
选项1:
String[] out = new String[n]; for(int i = 0; i< n; i++) out[i]=in.get(i);
选项2:
String[] out = (String[]) (in.subList(0, n)).toArray();
选项3:有更快的方法吗? 也许使用Java8-streams?
选项1比选项2快
因为选项2创建一个新的List
引用,然后从List
创建一个n
元素数组(选项1完美地调整输出数组的大小)。 但是,首先你需要修复一个bug。 使用<
(不是<=
)。 喜欢,
String[] out = new String[n]; for(int i = 0; i < n; i++) { out[i] = in.get(i); }
假设:
list – 列出
使用Java 8 Streams,
-
将列表中的前N个元素放入列表中,
List
firstNElementsList = list.stream().limit(n).collect(Collectors.toList()); -
将列表中的前N个元素转换为数组,
String[] firstNElementsArray = list.stream().limit(n).collect(Collectors.toList()).toArray(new String[n]);
它主要取决于n
大小。
如果n==0
,没有什么比选项#1更好:)
如果n非常大, toArray(new String[n])
会更快。
使用:Arrays.copyOf(yourArray,n);
我使用内置方式 :
System.arraycopy(srcArray, srcBeginning, destArray, destBeginning, length);