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
时,它只是内部指针的移动。