나는 이 ArrayList
보다 빨리 채워질 것이라고 생각 해왔다. 내가 알고 있듯이 ArrayList
은 제한된 길이 (상수)의 간단한 배열을 기반으로합니다. 따라서 배열이 범위를 벗어날 때마다 더 높은 범위의 새로운 배열이 만들어집니다. LinkedList
은 훨씬 간단합니다. 메모리를 제외하고는 아무런 제한이 없기 때문에 더 빨리 채워야합니다. 그러나 나는 다음 코드를 실행 :필링 ArrayList 대 LinkedList
public static void main(String[] args) {
int length = 7000000;
List<Integer> list = new LinkedList<Integer>();
long oldTime = System.currentTimeMillis();
for (int i = 0; i < length; i++) {
list.add(i);
}
System.out.println("LinkedList fill: " + (System.currentTimeMillis() - oldTime));
list = new ArrayList<Integer>();
oldTime = System.currentTimeMillis();
for (int i = 0; i < length; i++) {
list.add(i);
}
System.out.println("ArrayList fill: " + (System.currentTimeMillis() - oldTime));
}
출력은 : 왜 그렇게
LinkedList fill: 3936
ArrayList fill: 628
?
귀하의 벤치 마크에 결함이 있기 때문에. http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java – assylias
스왑을 시도 했습니까? 먼저 arraylist와 linkedlist보다? –
그 반대의 경우, 즉 ArrayList를 먼저 수행 한 다음 LL? 또한 ArrayList 생성자에 길이를 전달하고 어떤 일이 발생하는지 확인하십시오. – SMA