2013-07-27 1 views
0

On m'a posé cette question lors de mon interview "Comment créer Linkedhashset en utilisant Hashset?" quelqu'un connaît la réponse?Comment créer Linkedhashset en utilisant Hashset?

+1

Java? Et que voulez-vous dire par "utiliser Hashset"? –

+0

oui pour Java, fondamentalement un HashSet qui se comporte comme LinkedHashSet, l'ordre d'insertion est préservé. Dis, je n'ai que HashSet et je veux le faire comme LinkedHashSet. – ACS

Répondre

2

La classe LinkedHashSet a un constructeur public LinkedHashSet(Collection<? extends E> c), vous pouvez donc faire

HashSet<Foo> hs = new HashSet<Foo>(); 
// add items... 
LinkedHashSet<Foo> lhs = new LinkedHashSet<Foo>(hs); 

pour obtenir une instance LinkedHashSet avec le même contenu que hs. Notez qu'il n'y a aucune garantie que les articles de hs sont insérés dans lhs dans le même ordre où ils ont été insérés dans hs, puisque cette information n'a jamais été enregistrée par hs.

Il n'existe aucun moyen de créer un "HashSet qui se comporte comme LinkedHashSet", c'est-à-dire une instance de la classe d'exécution HashSet qui se comporte comme une instance LinkedHashSet. Cependant, vous pouvez faire

HashSet<Foo> hs = new LinkedHashSet<Foo>(); 

qui vous donnerait une instance qui serait vu par le monde extérieur comme une HashSet simple mais utiliser la mise en œuvre en interne LinkedHashSet. Je n'arrive pas à voir pourquoi vous voudriez jamais faire cela, cependant - vous obtiendriez seulement un tas d'overhead et aucune fonctionnalité ajoutée, puisque le type déclaré est HashSet. La raison pour laquelle vous souhaitez utiliser un LinkedHashSet en premier lieu est de garantir l'ordre d'itération prévisible, mais vous ne pouvez toujours pas supposer que pour hs - vous pouvez affecter hs = new HashSet<Foo>() à tout moment, par exemple.

+0

Merci beaucoup Emil. – ACS

+1

Il est considéré comme de bonnes manières d'accepter une réponse qui vous a aidé. :) –

Questions connexes