将 List 的前 n 个元素放入数组的最快方法

2022-08-31 15:21:40

获取存储在数组中的列表的前 n 个元素的最快方法是什么?

将此视为方案:

int n = 10;
ArrayList<String> 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流?


答案 1

假设:

列表 - 列表<String>

使用 Java 8 流,

  • 将列表中的前 N 个元素获取到列表中,

    List<String> firstNElementsList = list.stream().limit(n).collect(Collectors.toList());

  • 将列表中的前 N 个元素放入数组中,

    String[] firstNElementsArray = list.stream().limit(n).collect(Collectors.toList()).toArray(new String[n]);


答案 2

选项 1 比选项 2 更快

因为选项 2 创建一个新引用,然后从 (选项 1 完美地调整输出数组的大小)创建一个元素数组。但是,首先您需要通过一个错误来修复关闭。使用(不是)。喜欢ListnList<<=

String[] out = new String[n];
for(int i = 0; i < n; i++) {
    out[i] = in.get(i);
}