4 Réponses :


1
votes

Eh bien le priorityQueue code> sera à lui-même dépend du comparateur code> ou de la commande naturelle des éléments pour son tri, de même le jeu code> serait dépendant de la fonction de commande naturelle ou du comparateur code> code> non, non, je ne pense pas que l'une existe comme faisant partie de l'installation de Java par défaut ...

Mais vous pourriez probablement créer une assez facilement si la vitesse Ce n'est pas une inquiétude en mettant simplement en œuvre les interfaces que vous souhaitez et en utilisant leurs bandes naturelles, etc. AKA P>

MyQueueSet extends PriorityQueue implements Set {
    HashSet set;
    ...
}


4 commentaires

Mais les objets ne sont pas partagés entre la file d'attente et l'ensemble ... ils sont complètement indépendants ... c'est une sorte de (erroné) multiple héritage?


@DFA Les objets sont partagés entre la file d'attente et l'ensemble ... Ses références sont stockées dans deux séries ... Ma suggestion est exacte la même que @andreeS_d - c'est une solution très courante utilisée dans les collections de Java. Si les collections de Java sont plus faciles à étendre et à créer la vôtre, cela ne serait pas aussi hackish ...


Cela n'a pas beaucoup de sens pour moi. Une file d'attente prioritaire est déjà triée. Vous n'avez donc besoin que d'un ensemble normal. De plus, je pense que dans mon cas, les frais généraux pour avoir deux collections seraient élevés, mes objets sont relativement petits, mais j'en ai beaucoup.


SUPPORT DU SUPPORT SUR LE SUPPORT EST SUPÉRIEURE DU HASH OU ROUGE ET NOIR Selon la mise en œuvre que vous choisissez, de sorte que vous pouvez avoir une heure (n) la recherche de la recherche ou une (journal n) ou o (1) recherche de hachage, vous avez donc raison dans cette régance, je vais mettre à jour la réponse ...



7
votes

S'il est suffisant d'avoir une file d'attente avec un comportement «d'origine», vous ne voulez tout simplement pas accepter des entrées en double, puis je pense que une solution facile pourrait être de la sous-classe priorityQueue code> et remplacer le ajouter () code>, addall () code> et offre () code> méthodes telles que:

@Override
public boolean offer(E e) {
  if (contains(e)) {
    return false; 
  } else {
    return super.offer(e);
  }
}


1 commentaires

C'est une possibilité que j'ai pensé. Je pensais juste que quelqu'un peut-être déjà mis en œuvre une telle collection.



0
votes

PriorityQueue est un abstractcollection - cela a une interface presque identique à un ensemble. Je suis sûr qu'il serait facile de faire un wrapper qui convertit une priorité à un ensemble. Vous pouvez conserver une table de hachage latérale d'éléments insérés pour éviter les doublons, si vous avez vraiment besoin de respecter cela.

Je ne pense pas que la priorité a besoin de nécessite que le comparète soit cohérent avec des égaux. Prioritorakeeue n'utilise pas d'équivalence du tout (à l'exception de ses opérations abstraites héritées?).


1 commentaires

Non, la prioritéQuie n'a pas les contraintes de cohérence, mais un ensemble trié. Et je ne veux vraiment pas avoir deux collections tenant les mêmes éléments.



3
votes

arbreset est un ensemble qui fournit un itérateur commandé. Il met en œuvre le triède interface, qui garantit que l'itérateur renvoyé par la méthode itérateur renvoie les éléments de l'ensemble dans l'ordre croissant, comme déterminé soit par leur commande naturelle (via comparable ), ou comme déterminé par un comparateur donné à l'ensemble à sa création.


0 commentaires