我需要使用泛型实现自定义链表.
这就是我所做的
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道或者只是不太明白我应该在哪里使用泛型以及如何使用?有任何想法吗?
你开始用Node类; 具体来说,您可以使它包含任何类型的数据.
你这样做:
在类级别引入泛型类型参数
public class Node<T> { }
Run Code Online (Sandbox Code Playgroud)无论您身在何处Object,请将其替换为T.
T data;
Run Code Online (Sandbox Code Playgroud)请务必更新对其他Node实例的引用,以便它们使用相同的泛型参数.
Node<T> next;
Run Code Online (Sandbox Code Playgroud)现在,您可以LinkedList用类似的方式解决课堂上的问题.
在类级别引入泛型类型参数
public class LinkedList<T> { }
Run Code Online (Sandbox Code Playgroud)将addfrom 的参数更改Object为T.
public void add(T data) { }
Run Code Online (Sandbox Code Playgroud)将泛型添加到您的Node实例,以便您不使用原始类型.
private Node<T> head;
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |