package test;
import java.util.ArrayList;
import java.util.List;
public class ArrayAndList {
public static void main(String[] args) {
int num = 10000000;
Integer[] mArray = new Integer[num];
List<Integer> mList = new ArrayList<>(num);
// array init test
long iCurr = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
mArray[i] = i;
}
System.out.println("array init:" + (System.currentTimeMillis() - iCurr));
// list init test
iCurr = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
mList.add(i);
}
System.out.println("list init:" + (System.currentTimeMillis() - iCurr));
// array get test
long mExTimeStamp = System.currentTimeMillis();
long r1 = 0;
for (int i = 0; i < num; i++) {
r1 += mArray[i];
}
System.out.println("array get:" + (System.currentTimeMillis() - mExTimeStamp));
// list get test
mExTimeStamp = System.currentTimeMillis();
long r2 = 0;
for (int i = 0; i < num; i++) {
r2 += mList.get(i);
}
System.out.println("list get:" + (System.currentTimeMillis() - mExTimeStamp));
if (r2 == r1) {
System.out.println("correct");
} else {
System.out.println("error");
}
}
}
Result:
array init:3312
list init:3029
array get:19
list get:23
correct
after several times test , List init always faster than Array assignment. Why ? why assignment slower than add()? As I know List composed of Array ? why it can be faster than Array on assignment.
Improved:
package test;
import java.util.ArrayList;
import java.util.List;
public class ArrayAndList {
public static void main(String[] args) {
int num = 10000000;
Integer[] mArray = new Integer[num];
List<Integer> mList = new ArrayList<>(num);
// array init test
long iCurr = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
mArray[i] = i;
}
System.out.println("array init:" + (System.currentTimeMillis() - iCurr));
// list init test
iCurr = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
mList.add(i);
}
System.out.println("list init:" + (System.currentTimeMillis() - iCurr));
mList.clear();
// second init List
iCurr = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
mList.add(i);
}
System.out.println("second list init:" + (System.currentTimeMillis() - iCurr));
// second init Array
iCurr = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
mArray[i] = i;
}
System.out.println("second array init:" + (System.currentTimeMillis() - iCurr));
// array get test
long mExTimeStamp = System.currentTimeMillis();
long r1 = 0;
for (int i = 0; i < num; i++) {
r1 += mArray[i];
}
System.out.println("array get:" + (System.currentTimeMillis() - mExTimeStamp));
// list get test
mExTimeStamp = System.currentTimeMillis();
long r2 = 0;
for (int i = 0; i < num; i++) {
r2 += mList.get(i);
}
System.out.println("list get:" + (System.currentTimeMillis() - mExTimeStamp));
if (r2 == r1) {
System.out.println("correct");
} else {
System.out.println("error");
}
}
}
Result:
array init:3331
list init:2867
second list init:725
second array init:814
array get:20
list get:25
correct
After improved test Method , test show more interesting and confusing Result. Assignment and add() both be more faster. But assignment is still slower than assignment.