2016-03-18 9 views
0

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)

私のコードを見つけることができます。 1. n1に等しいiがされている場合、リストの最大のインデックスがn1 - 1であるとして、あなたがIndexOutOfBoundsException取得 - 私はサイズに0からある

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); 

    } 
} 
+2

1秒、2秒、3秒が混ざっています。プログラムをよく慎重にチェックしてください。 –

+1

少なくとも、関連する行が何であるか教えてください。 – bcsb1001

+0

Paulが言ったように、重複したコードが混在しています。再利用されたコードはメソッドに属します。あなたの/////行の間のものを、長いシグニチャを持つ1つのメソッドとして書き直してください。getIterationTime(int count) – LinuxDisciple

答えて

5

問題が

for (int i = 1; i <= n1; i++) { 
    list1.get(i); 
} 

インデックスであるしてください助けが必要です。 list2list3のために行く

for (int i = 0; i < n1; i++) { 
    list1.get(i); 
} 

同じに変更します。

さらに、@ Paul Boddingtonが述べたように、list3には何も追加しませんが、list2に値を2回挿入します。

+0

また、 'list3'に何も追加されていません。 –

関連する問題