0
public void printList( ){
    Node<E> p ;
    System.out.printf( ” [ ” ) ;
    for ( p=head.next ; p != null ; p=p.next )
        System.out.print( p.element ) ;
    System.out.printf( ” ] ” ) ;
}

public void addLast (E e){
    Node<E> p = head;   // <--- data type Node<E>, var name = p, but what is head type?
    while ( p.next != null )
        p = p.next ;
    p.next = new Node<E>(e , null ) ;
}

泛型示例:

public class Box {
private Object object;

public void set(Object object) { this.object = object; }
public Object get() { return object; }

}

使用泛型:

// T stands for "Type"
public class Box<T> {
    private T t; 

    public void set(T t) { 
        this.t = t;
    }
    public T get() { 
        return t;
    }
}

我对链表如何直观地工作有一个大致的了解,但是我在代码中看不到它。

我知道你有元素和对下一个节点的引用。在上面的代码中,“.”是怎么回事?运算符在遍历列表直到达到 null 时工作?

我相信“下一个”是一个参考变量。当它执行 p=p.next 时,它在代码/计算机中如何工作?

在不相关的注释上,节点?而不是节点(E)?不同之处?在上面的例子中,似乎 'object' 被 't' 取代了,我看不出有什么好处。;S

任何帮助都非常感谢,在此先感谢!

4

3 回答 3

0

在上面的代码中,只要head.next不等于 null p 就会被设置为列表中的下一个“链接”。这将继续下去。p.next返回对下一个链接的引用,然后将其设置为 p。该参考链将继续存在。

Node<E>是一个泛型类型,它允许类的用户传递节点要包含的类型。与简单地使用强制转换相比,这允许更大的类型安全性。

于 2012-06-16T04:14:19.337 回答
0

假设您的Node班级属于以下类型:

class Node<T>{
    Node<T> next;
    T element;
}        

现在任何对“节点”类的引用都可以访问它的两个属性。运算符.用于访问属性。

当您设置p = p.next时,它只是内部指针的移动。

于 2012-06-16T04:16:33.050 回答
0

将 LinkedList 视为链接节点的列表可能会有所帮助。每个节点将持有对下一个节点的引用(如果存在)。我不确定它是否会有所帮助,但是当我不得不在学校完成这项作业时,我发现查看API并尝试使用它非常有帮助。

使用泛型节点将是对象类型的节点,其中节点将是特定类型的节点。例如,LinkedList 将保存字符串。可能有助于更好地理解泛型的工作原理。

下面是一个使用泛型的简单示例:

Class Box<E>{
    private E variable;

    public E get(){
        return variable;
    }

    public void set(E variable){
        this.variable=variable;
    }

    public static void main(String[] args){
        Box<String> example=new Box<String>();
        example.set("test");
        System.out.println(example.get());

        Box<Integer> example2=new Box<Integer>();
        example2.set(1);
        //example2.set("test");will not work because it is types as an Integer
        System.out.println(example2.get()+1);
    }
}
于 2012-06-16T04:24:44.510 回答