将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);