如何使我的自定义链表使用泛型?
How to make my custom linked list to use generics?
我需要使用泛型实现自定义链表。
这是我所做的
public class Node {
Node next;
Object data;
public Node(Object data) {
next = null;
this.data = data;
}
public Object getData() {
return data;
}
public void setData(Object dataValue) {
data = dataValue;
}
public Node getNext() {
return next;
}
public void setNext(Node nextValue) {
next = nextValue;
}
}
public class LinkedList {
private Node head;
private int size;
public LinkedList() {
head = new Node(null);
size = 0;
}
public void add(Object data) {
Node node = new Node(data);
Node current = head;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(node);
size++;
}
public int getSize() {
return size;
}
public String toString() {
Node current = head.getNext();
String elements = "";
while (current != null) {
elements += "[" + current.getData().toString() + "]";
current = current.getNext();
}
return elements;
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Hello there!");
LinkedList list = new LinkedList();
list.add("First node");
list.add("Second node");
list.add("Third node");
list.add("Fourth node");
list.add("Fifth node");
System.out.println("Linked list contains " + list.getSize() + " nodes");
System.out.println("Here they are: " + list);
}
}
我不知道或者只是不太明白我应该在哪里使用泛型以及如何使用?有什么想法吗?
您开始 Node
class;具体来说,你让它可以包含任何类型的数据。
你这样做是这样的:
在class级别引入泛型类型参数
public class Node<T> { }
无论哪里有 Object
,请将其替换为 T
。
T data;
确保更新对内部其他 Node
实例的引用,以便它们使用相同的通用参数。
Node<T> next;
现在,您可以用类似的方式解决 LinkedList
class 中的问题。
在class级别引入泛型类型参数
public class LinkedList<T> { }
将 add
的参数从 Object
更改为 T
。
public void add(T data) { }
将泛型添加到您的 Node
个实例中,这样您就不会使用原始类型。
private Node<T> head;
您应该考虑通过 Generics tutorial。具体来说,通读 'Generic Types' 部分。
基本上,您的 LinkedList 和 Node 实现需要通用,只需将它们声明为 LinkedList<T>
和 Node<T>
。一旦你将 类 更改为通用的,你就可以实例化一个参数化的 LinkedList,例如:
LinkedList<String> stringList = new LinkedList<>();
LinkedList 现在是类型安全的,只允许存储字符串。
我需要使用泛型实现自定义链表。
这是我所做的
public class Node {
Node next;
Object data;
public Node(Object data) {
next = null;
this.data = data;
}
public Object getData() {
return data;
}
public void setData(Object dataValue) {
data = dataValue;
}
public Node getNext() {
return next;
}
public void setNext(Node nextValue) {
next = nextValue;
}
}
public class LinkedList {
private Node head;
private int size;
public LinkedList() {
head = new Node(null);
size = 0;
}
public void add(Object data) {
Node node = new Node(data);
Node current = head;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(node);
size++;
}
public int getSize() {
return size;
}
public String toString() {
Node current = head.getNext();
String elements = "";
while (current != null) {
elements += "[" + current.getData().toString() + "]";
current = current.getNext();
}
return elements;
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Hello there!");
LinkedList list = new LinkedList();
list.add("First node");
list.add("Second node");
list.add("Third node");
list.add("Fourth node");
list.add("Fifth node");
System.out.println("Linked list contains " + list.getSize() + " nodes");
System.out.println("Here they are: " + list);
}
}
我不知道或者只是不太明白我应该在哪里使用泛型以及如何使用?有什么想法吗?
您开始 Node
class;具体来说,你让它可以包含任何类型的数据。
你这样做是这样的:
在class级别引入泛型类型参数
public class Node<T> { }
无论哪里有
Object
,请将其替换为T
。T data;
确保更新对内部其他
Node
实例的引用,以便它们使用相同的通用参数。Node<T> next;
现在,您可以用类似的方式解决 LinkedList
class 中的问题。
在class级别引入泛型类型参数
public class LinkedList<T> { }
将
add
的参数从Object
更改为T
。public void add(T data) { }
将泛型添加到您的
Node
个实例中,这样您就不会使用原始类型。private Node<T> head;
您应该考虑通过 Generics tutorial。具体来说,通读 'Generic Types' 部分。
基本上,您的 LinkedList 和 Node 实现需要通用,只需将它们声明为 LinkedList<T>
和 Node<T>
。一旦你将 类 更改为通用的,你就可以实例化一个参数化的 LinkedList,例如:
LinkedList<String> stringList = new LinkedList<>();
LinkedList 现在是类型安全的,只允许存储字符串。