1

我正在尝试简单的链表收集程序,但它并没有给我输出。
我创造了这个东西

import java.lang.*;  
import java.util.*;  

class Linkedlist  
{  
    public static void main (String [] args)  
    {  
        LinkedList ll=new LinkedList ();  
        System.out.println ("CONTENTS OF l1 = "+ll);  
        System.out.println ("SIZE = "+ll.size ());  
        ll.add (new Integer (10));  
        ll.add (new Integer (20));  
        ll.add (new Integer (30));  
        ll.add (new Integer (40));  
        System.out.println ("CONTENTS OF ll = "+ll);  
        System.out.println ("SIZE = "+ll.size ());

        // retrieving data of ll using toArray ()  
        Object obj []=ll.toArray ();  
        int s=0;  

        for (int i=0; i<obj.length; i++)  
        {  
            Integer io= (Integer) obj [i];  
            int x=io.intValue ();  
            s=s+x;  
        }  

        System.out.println ("SUM USING toArray () = "+s);  
        ll.addFirst (new Integer (5));  
        ll.addFirst (new Integer (6));  
        System.out.println ("CONTENTS OF ll = "+ll);  
        System.out.println ("SIZE = "+ll.size ());  

        // retrieving data of ll using iterator ()  
        Iterator itr=ll.iterator ();  
        int s1=0;  

        while (itr.hasNext ())  
        {  
            Object obj1=itr.next ();  
            Integer io1= (Integer) obj1;  
            int x1=io1.intValue ();  
            s1=s1+x1;  
        }

        System.out.println ("SUM USING iterator () = "+s1);  
        ListIterator litr=ll.listIterator (); 

        while (litr.hasNext ())  
        {  
            Object obj2=litr.next ();  
            System.out.print (obj2+",");  
        } 

        System.out.println ("\n");  

        while (litr.hasPrevious ())  
        {  
            Object obj3=litr.next ();  
            System.out.print (obj3+",");  
        }

        System.out.println ("\n");  
        Object obj4=ll.get (2);// random retrieval  
        System.out.println (obj4);  
    }  
}

输出是

Note: Linkedlist.java uses unchecked or unsafe operations.  
Note: Recompile with -Xlint:unchecked for details.  
4

3 回答 3

2

我通过 eclipse 执行了你的程序:

只需使用LinkedList<Integer>而不是仅使用 LinkedList。没有警告。

输出 =>

CONTENTS OF l1 = []
SIZE = 0
CONTENTS OF ll = [10, 20, 30, 40]
SIZE = 4
SUM USING toArray () = 100
CONTENTS OF ll = [6, 5, 10, 20, 30, 40]
SIZE = 6
SUM USING iterator () = 111
6,5,10,20,30,40,

Exception in thread "main" java.util.NoSuchElementException
    at java.util.LinkedList$ListItr.next(Unknown Source)
    at com.Linkedlist.main(Test.java:46)
于 2012-07-06T06:56:23.763 回答
1

利用

LinkedList<Integer> ll = new LinkedList<Integer>();
Iterator<Integer> itr = ll.iterator();
ListIterator<Integer> litr = ll.listIterator();

安装在

LinkedList ll = new LinkedList();
Iterator itr = ll.iterator();
ListIterator litr = ll.listIterator();

如下所示

    LinkedList<Integer> ll = new LinkedList<Integer>();
    System.out.println("CONTENTS OF l1 = " + ll);
    System.out.println("SIZE = " + ll.size());
    ll.add(new Integer(10));
    ll.add(new Integer(20));
    ll.add(new Integer(30));
    ll.add(new Integer(40));
    System.out.println("CONTENTS OF ll = " + ll);
    System.out.println("SIZE = " + ll.size());
    // retrieving data of ll using toArray ()
    Object obj[] = ll.toArray();
    int s = 0;
    for (int i = 0; i < obj.length; i++) {
        Integer io = (Integer) obj[i];
        int x = io.intValue();
        s = s + x;
    }
    System.out.println("SUM USING toArray () = " + s);
    ll.addFirst(new Integer(5));
    ll.addFirst(new Integer(6));
    System.out.println("CONTENTS OF ll = " + ll);
    System.out.println("SIZE = " + ll.size());
    // retrieving data of ll using iterator ()
    Iterator<Integer> itr = ll.iterator();
    int s1 = 0;
    while (itr.hasNext()) {
        Object obj1 = itr.next();
        Integer io1 = (Integer) obj1;
        int x1 = io1.intValue();
        s1 = s1 + x1;
    }
    System.out.println("SUM USING iterator () = " + s1);
    ListIterator<Integer> litr = ll.listIterator();
    while (litr.hasNext()) {
        Object obj2 = litr.next();
        System.out.print(obj2 + ",");
    }
    System.out.println("\n");
    while (litr.hasNext()) {
        Object obj3 = litr.next();
        System.out.print(obj3 + ",");
    }
    System.out.println("\n");
    Object obj4 = ll.get(2);// random retrieval
    System.out.println(obj4);
于 2012-07-06T07:07:42.213 回答
0

第一个答案(由 Nandkumar 提供)是正确的,我还要检查由以下几行引起的运行时错误:

while (litr.hasPrevious ())  
    {  
        Object obj3=litr.next ();  
        System.out.print (obj3+",");  
    }

那就是:你检查你的迭代器是否有一个“上一个”项目,然后去寻找“下一个”?可能不是你打算做的。

编译时的“错误”只是一个警告,你可以在编译后运行你的程序,但是编译器告诉你它在你的代码中发现了一些奇怪的东西。

于 2012-07-06T07:05:25.517 回答