我寫了一個程序,它存儲了一些整數在linkedlist
,它也用迭代器和get(index)
測試了遍歷列表的時間,我100%確定我的程序,但是當我運行它的程序時我這個錯誤:LinkedList時間遍歷的迭代器
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 20000, Size: 20000 at java.util.LinkedList.checkElementIndex(LinkedList.java:555) at java.util.LinkedList.get(LinkedList.java:476) at Homework2.MyLinkedList.main(MyLinkedList.java:72)
下面你可以找到我的代碼。我需要幫助,請
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Scanner;
public class MyLinkedList {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// System.out.print("Enter the size of your list: ");
// int size = in.nextInt();
int n1 = 20000;
int n2 = 200000;
int n3 = 2000000;
LinkedList <Integer> list1 = new LinkedList();
for (int i = 1; i <= n1; i++) {
list1.add(i);
}
long t1Start = System.currentTimeMillis();
ListIterator <Integer> iterator1 = list1.listIterator();
while (iterator1.hasNext()) {
iterator1.next();
}
long t1Stop = System.currentTimeMillis();
long t1Final = t1Stop - t1Start;
//////////////////////////////////////////
LinkedList <Integer> list2 = new LinkedList();
for (int i = 1; i <= n2; i++) {
list2.add(i);
}
long t2Start = System.currentTimeMillis();
ListIterator <Integer> iterator2 = list1.listIterator();
while (iterator1.hasNext()) {
iterator1.next();
}
long t2Stop = System.currentTimeMillis();
long t2Final = t2Stop - t2Start;
//////////////////////////////////////////
LinkedList <Integer> list3 = new LinkedList();
for (int i = 1; i <= n2; i++) {
list2.add(i);
}
long t3Start = System.currentTimeMillis();
ListIterator <Integer> iterator3 = list1.listIterator();
while (iterator1.hasNext()) {
iterator1.next();
}
long t3Stop = System.currentTimeMillis();
long t3Final = t3Stop - t3Start;
//////////////////////////////////////////
long get1Start = System.currentTimeMillis();
for (int i = 1; i <= n1; i++) {
list1.get(i);
}
long get1Stop = System.currentTimeMillis();
long get1Final = get1Stop - get1Start;
//////////////////////////////////////////
long get2Start = System.currentTimeMillis();
for (int i = 1; i <= n2; i++) {
list2.get(i);
}
long get2Stop = System.currentTimeMillis();
long get2Final = get2Stop - get2Start;
//////////////////////////////////////////
long get3Start = System.currentTimeMillis();
for (int i = 1; i <= n3; i++) {
list3.get(i);
}
long get3Stop = System.currentTimeMillis();
long get3Final = get3Stop - get3Start;
//////////////////////////////////////////
System.out.println("n\t\titerator,seconds\t\tget(index),seconds");
System.out.println(n1 + "\t\t" + t1Final + "\t\t" + get1Final);
System.out.println(n2 + "\t\t" + t2Final + "\t\t" + get2Final);
System.out.println(n3 + "\t\t" + t3Final + "\t\t" + get3Final);
}
}
你得到1s,2s和3s混在一起。仔細檢查你的程序。 –
至少告訴我們相關的線路是什麼...... – bcsb1001
就像Paul說的,你會混淆重複的代碼。重用代碼屬於一種方法。重寫你的/////行之間的東西作爲一個方法與簽名long getIterationTime(int count) – LinuxDisciple