LinkedList mise en œuvre en Java avec les génériques et amélioré pour
J'ai besoin de vous pour mon examen de la mise en œuvre d'une seule Liste Liée (SLL) s'il vous plaît. La mise en œuvre devrait utiliser des génériques et être en mesure d'utiliser l'interface pour.
Le problème est que, quand je ne for (Number n : list)
être list
un MyLinkedList<Integer>
ou MyLinkedList<Double>
, j'obtiens le message d'erreur "incompatibilité de Type: impossible de convertir de type d'élément Objet de Nombre".
C'est ce que j'ai. Les pièces que je ne suis pas très sûre de ce sont les génériques et les itérateurs.
Merci d'avance.
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 ()
{
}
}
Pourquoi ne pas simplement utiliser le construit en java.util.LinkedList? La seule raison qui vient à l'esprit est de savoir si cela est un devoir à la maison, ou que vous tentez d'accéder à une compréhension de la façon dont les listes chaînées et les génériques de travail. (Si c'est les devoirs, vous devriez tag avec des 'devoirs')
OriginalL'auteur nunos | 2010-09-26
Vous devez vous connecter pour publier un commentaire.
Iterable<T>
au lieu deIterable<Object>
.add(Node)
ne fait pas ajouter un objet à la liste.MyLinkedListIterator<T>
devrait mettre en œuvreIterator<T>
.MyLinkedListIterator.hasNext()
va jeter unNullPointerException
si la liste est vide.MyLinkedListIterator.next()
ne pas passer à l'élément suivant dans la liste.OriginalL'auteur Steve Emmerson
Vous devez retourner un
Iterator<T>
de laiterator
méthode et vous devrait également s'étendreIterable<T>
au lieu deIterable<Object>
.En outre, votre
MyLinkedListIterator<T>
devrait mettre en œuvreIterator<T>
. Ensuite, il doit travailler.OriginalL'auteur Ronald Wildenberg
Pourquoi ne pas vous utiliser
<E>
Look ici pour une mise en œuvre complète
OriginalL'auteur bragboy
Sur le dessus de ce que les autres ont dit, vous ne devriez probablement pas exposer
Node
dans vos méthodes publiques, les nœuds doivent être purement interne à l'aspect de la mise en œuvre.OriginalL'auteur Andy
Élargir le point: MyLinkedListIterator.next() de ne pas passer à l'élément suivant dans la liste.
la méthode suivante doit être quelque chose le long de ces lignes pour le faire fonctionner:
OriginalL'auteur Raghavan