我需要您查看我的单一链接列表(SLL)的实现。实现应该使用泛型并且能够使用增强的for。
问题在于,当我for (Number n : list)
list
MyLinkedList<Integer>
或MyLinkedList<Double>
时,我收到错误:“类型不匹配:无法从元素类型对象转换数字“。
这就是我所拥有的。我不太确定的部分是泛型和迭代器。
提前致谢。
import java.util.Iterator;
public class MyLinkedList<T> implements Iterable<Object>
{
private Node head;
public MyLinkedList ()
{
head = null;
}
public void add (Node n)
{
if (head == null)
{
head = n;
}
else
{
Node node = head;
while (node.next != null)
{
node = node.next;
}
node = n;
}
}
public Iterator iterator()
{
return new MyLinkedListIterator (head);
}
public int size ()
{
int ret = 0;
MyLinkedListIterator it = new MyLinkedListIterator (head);
while (it.hasNext ())
{
it.next();
ret++;
}
return ret;
}
public Node getHead ()
{
return head;
}
}
class MyLinkedListIterator<T> implements Iterator
{
private Node node;
public MyLinkedListIterator (Node h)
{
node = h;
}
public MyLinkedListIterator (MyLinkedList<T> l)
{
this(l.getHead ());
}
public boolean hasNext ()
{
if (node.next == null)
{
return false;
}
else
{
return true;
}
}
public Object next ()
{
return node.next;
}
public void remove ()
{
}
}
答案 0 :(得分:8)
Iterable<T>
而不是Iterable<Object>
。add(Node)
实际上并没有将对象添加到列表中。MyLinkedListIterator<T>
应该实施Iterator<T>
。MyLinkedListIterator.hasNext()
将抛出NullPointerException
。MyLinkedListIterator.next()
不会移动到列表中的下一个项目。答案 1 :(得分:2)
您应该从Iterator<T>
方法返回iterator
,并且还应该Iterable<T>
而不是Iterable<Object>
。
此外,您的MyLinkedListIterator<T>
应该实施Iterator<T>
。然后它应该工作。
答案 2 :(得分:1)
为什么不使用<E>
public class Node<E>{
E data;
Node<E> next;
}
public class SinglyLinkedList<E> {
Node<E> start;
int size;
.......
}
查看here以获得全面的实施
答案 3 :(得分:1)
除了其他人所说的,你可能不应该在公共方法中暴露Node
- 节点应该是实现的纯粹内部方面。
答案 4 :(得分:0)
扩展点:MyLinkedListIterator.next()不会移动到列表中的下一个项目。
下一个方法应该是沿着这些方向运行的东西:
public T next() {
if(isFirstNode) {
isFirstNode = false;
return node.data;
}
node = node.next;
return node.data;
}