Java 链表直觉
} 使用泛型:Java 链表直觉,java,linked-list,Java,Linked List,} 使用泛型: public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } //T代表“类型” 公共类箱{ 私人T; 公共空集(T){ t=t; } 公共不获取(){ 返回t; } } 我对链表如何直观地工作有一个大致的概念,但是我无法在代码中看到它 我知道你有元素和对下一个节
public class Box {
private Object object;
public void set(Object object) { this.object = object; }
public Object get() { return object; }
//T代表“类型”
公共类箱{
私人T;
公共空集(T){
t=t;
}
公共不获取(){
返回t;
}
}
我对链表如何直观地工作有一个大致的概念,但是我无法在代码中看到它
我知道你有元素和对下一个节点的引用。在上面的代码中,“.”运算符在遍历列表直到达到null时是如何工作的
我相信‘next’是一个参考变量。下一步,它是如何在代码/计算机中工作的
在一个无关的音符上,节点?而不是节点(E)?差别在上面的例子中,似乎“object”被“t”取代,我看不出它的优点;
非常感谢您的帮助,提前谢谢 在上面的代码中,只要
head.next
不等于null,p将被设置为列表中的下一个“link”。这将继续下去p.next
返回对下一个链接的引用,然后将该链接设置为p。此参考链将继续
节点
是一种泛型类型,允许类的用户传递节点要包含的类型。这比简单地使用强制类型转换允许更大的类型安全性。假设您的节点
类属于以下类型:
// T stands for "Type"
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
类节点{
节点下一步;
T元素;
}
现在,“Node”类的任何引用都可以访问它的两个属性。而
操作符用于访问属性
设置
p=p.next
时,它只是内部指针的移动 将LinkedList视为链接节点的列表可能会有所帮助。其中每个节点将保留对下一个节点的引用(如果存在)。我不确定它是否会有帮助,但当我不得不在学校里做这个作业时,我发现浏览并尝试使用它非常有帮助
对于泛型,节点将是Object类型的节点,其中节点将是特定类型的节点。例如,LinkedList将保存字符串,可能有助于更好地理解泛型是如何工作的
下面是一个使用泛型的简单示例:
class Node<T>{
Node<T> next;
T element;
}
类框{
私有E变量;
公共E get(){
返回变量;
}
公共无效集(E变量){
变量=变量;
}
公共静态void main(字符串[]args){
框示例=新框();
示例。设置(“测试”);
System.out.println(example.get());
Box example2=新框();
例2.集合(1);
//示例2.set(“test”);将不起作用,因为它是整数类型
System.out.println(例如2.get()+1);
}
}
是否将“下一步”定义为变量?它不在上面,应该是??下一个可以是变量或方法,但在这两种情况下,它都返回对链中下一个“链接”的引用。然后将其设置为p和循环repeatsahh,因此必须在类节点中定义“next”吗?对象p有可以从其父类使用的变量?您在上面定义的类节点是什么?仍然不理解泛型的概念。。。想再详细一点吗?谢谢。我不想问这么含糊的问题,但你有什么特别的地方不明白吗?还是仅仅是一般概念?我刚刚编辑了我的答案,给出了一个如何使用泛型的示例。因此,类“example”被设置为泛型,以接受任何输入的基元类型变量?有道理。是的,除了那些不是基元类型。字符串和整数(不是int)是对象。您可以使用上面的代码,让它接受任何对象。
class Node<T>{
Node<T> next;
T element;
}
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);
}
}