Est-il un no-duplicate Liste de mise en œuvre là-bas?
Je sais à propos de SortedSet
, mais dans mon cas, j'ai besoin de quelque chose qui met en œuvre List
, et pas Set
. Donc, il y a une mise en œuvre là-bas, à l'API ou ailleurs?
Il ne devrait pas être difficile à mettre en place moi-même, mais j'ai pensé pourquoi ne pas demander à des gens ici en premier?
- Pourquoi est-il nécessaire de mettre en œuvre la Liste? Les ensembles sont itératif, comme des listes, donc je suppose que la méthode de réception est l'application de la Liste pour une autre raison.
- C'est vrai, c'est une demande extérieure et de la structure de données comprend un enfer de beaucoup plus d'une Liste.
- Si l'utilisateur souhaite une LISTE, alors il est clair que les besoins, les méthodes de la LISTE de l'interface qui ne sont pas présents de messagerie unifiée l'ENSEMBLE de l'interface...
InformationsquelleAutor Yuval | 2008-11-06
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de Java collection de la bibliothèque standard pour ce faire.
LinkedHashSet<E>
préserve de la commande à la façon d'unList
, cependant, de sorte que si vous mettez l'ensemble dans unList
lorsque vous voulez l'utiliser comme unList
vous aurez la sémantique que vous voulez.Sinon, le Commons Collections (ou
commons-collections4
, pour la version générique) a unList
qui fait ce que vous voulez déjà:SetUniqueList
/SetUniqueList<E>
.Voici ce que j'ai fait et ça fonctionne.
En supposant que j'ai un
ArrayList
de travailler avec la première chose que j'ai faite a été créé un nouveauLinkedHashMap
.Puis j'ai essayer d'ajouter mon nouvel élément à la
LinkedHashSet
. La méthode add ne modifie pas laLinkedHasSet
et retourne false si l'élément nouveau est un doublon. Donc, cela devient une condition que je puisse le tester avant de l'ajouter à laArrayList
.C'est une façon simple et élégante pour éviter les doublons d'être ajouté à la liste du réseau. Si vous le souhaitez, vous pouvez encapsuler et de remplacer ajouter une méthode dans une classe qui étend la
ArrayList
. N'oubliez pas de traiter avecaddAll
par boucle à travers les éléments et l'appel de la méthode add.Voici donc ce que j'ai fait par la suite. J'espère que cela aide quelqu'un d'autre.
Vous devriez sérieusement envisager de dhiller réponse:
new ArrayList(set)
(ou unnew LinkedList(set)
, peu importe).Je pense que la solution que vous avez posté avec l'
NoDuplicatesList
a des problèmes, surtout avec lacontains()
méthode, en plus de votre classe ne gère pas le contrôle de doublon dans la Collection passée à votreaddAll()
méthode.Pourquoi ne pas encapsuler un ensemble avec une liste, sorte comme:
Ce qui laisse les autres de la mise en œuvre de quelqu'un qui est un véritable maître de Collections 😉
J'ai besoin de quelque chose comme ça, donc je suis allé à la chambre des communes collections et utilisé le SetUniqueList, mais quand j'ai couru quelques test de performance, j'ai trouvé qu'il ne semble pas optimisé en comparant le cas si je veux utiliser un Ensemble et obtenir un Tableau à l'aide de l'Ensemble.méthode toArray (), le SetUniqueTest a pris 20:1 temps de remplir puis traverser de 100 000 Chaînes de comparer à l'autre implementaion, qui est une grosse affaire de différence, donc Si vous vous inquiétez au sujet de la performance, je vous recommande d'utiliser le Jeu et obtenir un Tableau au lieu d'utiliser le SetUniqueList, à moins que vous vraiment besoin de la logique de la SetUniqueList, alors vous devez vérifier d'autres solutions...
Les tests de code de la méthode main:
public static void main(String[] args) {
}
Ce qui concerne
Mohammed Sleem
http://abusleem.net/blog
REMARQUE: il ne prend pas sous-liste de mise en œuvre de compte.
La documentation pour les interfaces de collection dit:
Donc, si vous ne voulez pas les doublons, vous ne devriez pas utiliser une liste.
dans
add
méthode, pourquoi ne pas utiliserHashSet.add()
pour vérifier les doublons au lieu deHashSet.consist()
.HashSet.add()
sera de retourtrue
si aucun doublon etfalse
autrement.HashSet#consist()
?Sur le dessus de ma tête, les listes d'autoriser les doublons. Vous pouvez rapidement mettre en œuvre un
UniqueArrayList
et remplacer toutes lesadd
/insert
fonctions pour vérifiercontains()
avant d'appeler les méthodes héritées. Pour un usage personnel, vous ne pouviez mettre en œuvre lesadd
méthode que vous utilisez, et de remplacer les autres pour lever une exception en cas de futurs programmeurs essayez d'utiliser la liste d'une manière différente.Je viens de faire ma propre UniqueList dans ma petite bibliothèque comme ceci:
J'ai un TestCollections classe qui ressemble à ceci:
Fonctionne très bien. Tout ce qu'il fait est qu'il ajoute à un ensemble si il ne l'a pas déjà, et il y a une liste de tableaux qui est consigné, ainsi que d'un tableau d'objets.