2011-03-16 4 views
1

J'ai ce problème que j'avais utilisé Arraylist dans tout mon programme jusqu'à présent et maintenant j'ai besoin que son fonctionnement soit aussi celui de la file d'attente prioritaire.ArrayList cast à PriorityQueue + java

Alors j'ai fait l'évidence qui me semblait et je l'ai casté comme PriorityQueue z = (PriorityQueue) x où x était arraylist.

Lors de l'exécution, cela a donné une erreur indiquant que cela n'était pas possible.

Existe-t-il un moyen simple de faire ce travail. Je ne peux pas changer toute la liste de tableaux en tant que file d'attente prioritaire puisque je devrai mettre à jour toutes les fonctions utilisées .....

Dois-je ajouter chaque fois un article d'arraylist à une nouvelle file d'attente prioritaire ou y at-il un meilleure méthode ...

Merci beaucoup ...

Répondre

4
PriorityQueue pq = new PriorityQueue(); 
pq.addAll(x); 
+0

Pourquoi suis-je obtenir l'erreur que «Vertex ne peut pas être jeté à java.lang.Comparable» où x est Liste de Vertex –

+0

@Chimmy toujours obtenir la même erreur .... –

+2

@ user506710 Vous essayez de faire une priorité file d'attente des éléments qui ne sont pas implémentés comparables. Edit: En d'autres termes, Java n'a aucun moyen de dire quel Vertex est plus petit ou plus grand qu'un autre, car il n'implémente pas l'interface Comparable. Pour plus de détails, regardez ici: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Comparable.html – Chimmy

0

une file d'attente prioritaire a beaucoup de code supplémentaire associé pour faire en sorte que les éléments contenus dans la file d'attente prioritaire sont classés par priorité. Une liste de tableaux n'a aucun de ce code, vous ne pouvez donc pas le convertir en file d'attente prioritaire.

Généralement, les choses peuvent être mises en relief en toute sécurité, mais vous essayez de baisser quelque chose ici. Vous ne pouvez pas le faire, car il n'y a aucune garantie que la liste de tableau est ordonnée avec n'importe quel type de priorité. Les structures de données sous-jacentes qui implémentent les deux garanties internes ne sont pas non plus les mêmes.

0

Il n'y a pas de manière simple. Un ArrayList implémente l'interface List, mais pas le Queue.

La création d'une nouvelle file d'attente à partir du contenu de la liste est probablement la plus simple.

Si vous connaissez le contenu est trié par priorité et vous devez être vraiment efficace, essayez d'emballage avec une classe Queue soutenu par votre ArrayList si vous avez besoin d'un objet de file d'attente comme dans un seul endroit, mais utilisent List s pour bonnes raisons ailleurs.