链表直觉


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 时,它在代码/计算机中是如何工作的?

在一个不相关的笔记上,节点?而不是node(E)?差异?在上面的例子中,似乎"对象"被"t"取代了,我看不到优势。;S

任何帮助真的非常感谢,提前感谢!

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

在上面的代码中,只要head.next不等于空,p就会被设置为列表中的下一个"链接"。这种情况将继续下去。 p.next返回对下一个链接的引用,该链接随后设置为 p。这个参考链将继续下去。

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

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

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

现在,"Node"类的任何引用都可以访问它的两个属性。.运算符用于访问属性。

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

相关内容

  • 没有找到相关文章

最新更新