Java没有指针的概念。那么java如何实现隐式可用的linkedList,甚至为此做一个浅表副本呢?
答案 0 :(得分:5)
Java确实有可以指向另一个对象的引用,或者为null。这就是链表所需要的一切。
通过为节点提供结构,在C中执行通用链表,同样,Java中的LinkedList也包含参考实际值的节点的私有类,以及对节点类的1个或多个引用链接。
答案 1 :(得分:4)
Java有参考。这些就像指针,除了你不能做像指针算术,或者指向整数的指针,反之亦然。
当然,链接列表是使用引用实现的。
Java避免指针算术和整数与指针之间转换的原因包括:
答案 2 :(得分:2)
您当然可以在Java中轻松实现自己的链接列表。您也可以使用java.util.LinkedList Class。
这是Ivor Horton的书“Beginning Java”中的一个简单的LinkedList实现:
public class LinkedList {
// Default constructor - creates an empty list
public LinkedList() {}
// Constructor to create a list containing one object
public LinkedList(Object item) {
if(item != null) {
current=end=start=new ListItem(item); // item is the start and end
}
}
// Construct a linked list from an array of objects
public LinkedList(Object[] items) {
if(items != null) {
// Add the items to the list
for(int i = 0; i < items.length; i++) {
addItem(items[i]);
}
current = start;
}
}
// Add an item object to the list
public void addItem(Object item) {
ListItem newEnd = new ListItem(item); // Create a new ListItem
if(start == null) { // Is the list empty?
start = end = newEnd; // Yes, so new element is start and end
} else { // No, so append new element
end.next = newEnd; // Set next variable for old end
end = newEnd; // Store new item as end
}
}
// Get the first object in the list
public Object getFirst() {
current = start;
return start == null ? null : start.item;
}
// Get the next object in the list
public Object getNext() {
if(current != null) {
current = current.next; // Get the reference to the next item
}
return current == null ? null : current.item;
}
private ListItem start = null; // First ListItem in the list
private ListItem end = null; // Last ListItem in the list
private ListItem current = null; // The current item for iterating
private class ListItem {
// Constructor
public ListItem(Object item) {
this.item = item; // Store the item
next = null; // Set next as end point
}
// Return class name & object
public String toString() {
return "ListItem " + item ;
}
ListItem next; // Refers to next item in the list
Object item; // The item for this ListItem
}
}