Fastest way to get the first n elements of a List into an Array

后端 未结 5 1855
囚心锁ツ
囚心锁ツ 2020-12-30 20:51

What is the fastest way to get the first n elements of a list stored in an array?

Considering this as the scenario:

int n = 10;
ArrayList

        
相关标签:
5条回答
  • 2020-12-30 21:09

    Assumption:

    list - List<String>

    Using Java 8 Streams,

    • to get first N elements from a list into a list,

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

    • to get first N elements from a list into an Array,

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

    0 讨论(0)
  • 2020-12-30 21:13

    Option 1 Faster Than Option 2

    Because Option 2 creates a new List reference, and then creates an n element array from the List (option 1 perfectly sizes the output array). However, first you need to fix the off by one bug. Use < (not <=). Like,

    String[] out = new String[n];
    for(int i = 0; i < n; i++) {
        out[i] = in.get(i);
    }
    
    0 讨论(0)
  • 2020-12-30 21:13

    Use: Arrays.copyOf(yourArray,n);

    0 讨论(0)
  • 2020-12-30 21:19

    It mostly depends on how big n is.

    If n==0, nothing beats option#1 :)

    If n is very large, toArray(new String[n]) is faster.

    0 讨论(0)
  • 2020-12-30 21:25

    Option 3

    Iterators are faster than using the get operation, since the get operation has to start from the beginning if it has to do some traversal. It probably wouldn't make a difference in an ArrayList, but other data structures could see a noticeable speed difference. This is also compatible with things that aren't lists, like sets.

    String[] out = new String[n];
    Iterator<String> iterator = in.iterator();
    for (int i = 0; i < n && iterator.hasNext(); i++)
        out[i] = iterator.next();
    
    0 讨论(0)
提交回复
热议问题