연결 목록에서 각 요소에는 다음 요소에 대한 포인터가 있습니다.
head -> item1 -> item2 -> item3 -> etc.
에 액세스하려면 item3
직접 점프 할 수 없기 때문에 item3에 도달 할 때까지 모든 노드를 통해 머리에서 걸어야한다는 것을 분명히 알 수 있습니다.
따라서 각 요소의 값을 인쇄하려면 다음과 같이 작성하면됩니다.
for(int i = 0; i < 4; i++) {
System.out.println(list.get(i));
}
무슨 일이 일어나는가 :
head -> print head
head -> item1 -> print item1
head -> item1 -> item2 -> print item2
head -> item1 -> item2 -> item3 print item3
인덱싱 할 때마다 목록의 처음부터 다시 시작되고 모든 항목을 거치기 때문에 이것은 매우 비효율적 입니다. 이는 복잡성이 O(N^2)
목록을 순회하는 것임을 의미 합니다!
대신 내가 이렇게했다면 :
for(String s: list) {
System.out.println(s);
}
그러면 무슨 일이 일어나는가 :
head -> print head -> item1 -> print item1 -> item2 -> print item2 etc.
모든 단일 순회에서 O(N)
.
지금의 다른 구현하려고 List
하는 ArrayList
, 하나는 간단한 배열에 의해 백업됩니다. 이 경우 배열이 연속적이므로 임의의 위치로 무작위 점프를 허용하므로 위의 두 순회 모두 동일합니다.