ในรายการที่เชื่อมโยงแต่ละองค์ประกอบมีตัวชี้ไปยังองค์ประกอบถัดไป:
head -> item1 -> item2 -> item3 -> etc.
ในการเข้าถึงitem3
คุณจะเห็นได้อย่างชัดเจนว่าคุณต้องเดินจากหัวผ่านทุกโหนดจนกว่าจะถึงข้อ 3 เนื่องจากคุณไม่สามารถกระโดดโดยตรงได้
ดังนั้นหากฉันต้องการพิมพ์ค่าของแต่ละองค์ประกอบถ้าฉันเขียนสิ่งนี้:
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
อันนั้นได้รับการสนับสนุนโดยอาร์เรย์ธรรมดา ในกรณีนั้นการข้ามผ่านทั้งสองข้างต้นจะเทียบเท่ากันเนื่องจากอาร์เรย์อยู่ติดกันดังนั้นจึงอนุญาตให้กระโดดแบบสุ่มไปยังตำแหน่งโดยพลการ