2016-02-25 2 views
1
Set<String> stringSet = new HashSet<String>(); 

ne conservera pas l'ordre évidemmentcollection java pour conserver l'ordre et doit être unique

Set<String> linkedHastSet = new LinkedHashSet<String>(); 

lors de la lecture des éléments de l'ensemble ci-dessus, il devrait conserver l'ordre, mais dans certains moments, il ne fonctionne pas? ai-je tort dans mon observation ou il me manque quelque chose?

+2

Quelle est la citation qui vous fait penser qu'elle ne retient pas la commande? –

+0

Utilisez un ['CopyOnWriteArraySet'] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CopyOnWriteArraySet.html), il fournit: ordre d'insertion, thread-safety, pas de dublicates , itération sécurisée en boucle – Ferrybig

+0

Selon le javadoc, il conserve la commande. Pouvez-vous montrer un exemple où ce n'est pas le cas? –

Répondre

3

Seulement LinkedHashSet garantit l'ordre prévisible

De jdoc:

Hash ta Liste de liens et d'implémentations de l'interface Set, avec ordre d'itération prévisible

1

Le Javadoc for LinkedHashSet est assez claire:

l'ordre d'itération ... est l'ordre dans lequel les éléments ont été insérés dans l'ensemble (insertion commande)