Array or List in Java. Which is faster?

后端 未结 30 2266
滥情空心
滥情空心 2020-11-22 04:30

I have to keep thousands of strings in memory to be accessed serially in Java. Should I store them in an array or should I use some kind of List ?

Since arrays keep

30条回答
  •  庸人自扰
    2020-11-22 04:51

    UPDATE:

    As Mark noted there is no significant difference after JVM warm up (several test passes). Checked with re-created array or even new pass starting with new row of matrix. With great probability this signs simple array with index access is not to be used in favor of collections.

    Still first 1-2 passes simple array is 2-3 times faster.

    ORIGINAL POST:

    Too much words for the subject too simple to check. Without any question array is several times faster than any class container. I run on this question looking for alternatives for my performance critical section. Here is the prototype code I built to check real situation:

    import java.util.List;
    import java.util.Arrays;
    
    public class IterationTest {
    
        private static final long MAX_ITERATIONS = 1000000000;
    
        public static void main(String [] args) {
    
            Integer [] array = {1, 5, 3, 5};
            List list = Arrays.asList(array);
    
            long start = System.currentTimeMillis();
            int test_sum = 0;
            for (int i = 0; i < MAX_ITERATIONS; ++i) {
    //            for (int e : array) {
                for (int e : list) {
                    test_sum += e;
                }
            }
            long stop = System.currentTimeMillis();
    
            long ms = (stop - start);
            System.out.println("Time: " + ms);
        }
    }
    

    And here is the answer:

    Based on array (line 16 is active):

    Time: 7064
    

    Based on list (line 17 is active):

    Time: 20950
    

    Any more comment on 'faster'? This is quite understood. The question is when about 3 time faster is better for you than flexibility of List. But this is another question. By the way I checked this too based on manually constructed ArrayList. Almost the same result.

提交回复
热议问题