441 Stimmen

Abrufen eines Elements aus einer Menge

Warum ist die Set eine Operation anbieten, um ein Element zu erhalten, das gleich einem anderen Element ist?

Set<Foo> set = ...;
...
Foo foo = new Foo(1, 2, 3);
Foo bar = set.get(foo);   // get the Foo element from the Set that equals foo

Ich kann fragen, ob die Set ein Element enthält, das gleich ist mit bar Warum kann ich dieses Element nicht bekommen? :(

Zur Klarstellung: Die equals wird überschrieben, aber es wird nur eines der Felder überprüft, nicht alle. Also zwei Foo Objekte, die als gleich angesehen werden, können tatsächlich unterschiedliche Werte haben, deshalb kann ich nicht einfach foo .

3voto

molyss Punkte 246

Sieht es so aus, als wäre das richtige Objekt die Interner aus Guave :

Bietet ein äquivalentes Verhalten zu String.intern() für andere unveränderliche Typen. Gemeinsame Implementierungen sind verfügbar in der Praktikanten Klasse.

Es hat auch ein paar sehr interessante Hebel, wie concurrencyLevel, oder die Art der Referenzen verwendet (es könnte erwähnenswert sein, dass es nicht ein SoftInterner, die ich als nützlicher als ein WeakInterner sehen könnte).

3voto

chiha asma Punkte 41

Können Sie die Klasse Iterator verwenden

import java.util.Iterator;
import java.util.HashSet;

public class MyClass {
 public static void main(String[ ] args) {
 HashSet<String> animals = new HashSet<String>();
animals.add("fox");
animals.add("cat");
animals.add("dog");
animals.add("rabbit");

Iterator<String> it = animals.iterator();
while(it.hasNext()) {
  String value = it.next();
  System.out.println(value);   
 }
 }
}

2voto

Lukas Z. Punkte 423

Ich weiß, dies wurde gefragt und vor langer Zeit beantwortet, jedoch wenn jemand interessiert ist, hier ist meine Lösung - benutzerdefinierte Set-Klasse, die von HashMap gesichert:

http://pastebin.com/Qv6S91n9

Alle anderen Set-Methoden können Sie problemlos implementieren.

2voto

Heisenberg Punkte 5284

Das habe ich auch schon gemacht! Wenn Sie Guava verwenden, können Sie es schnell in eine Karte umwandeln:

Map<Integer,Foo> map = Maps.uniqueIndex(fooSet, Foo::getKey);

2voto

Hardik Patel Punkte 936

Wenn Sie n-te Element von HashSet wollen, können Sie mit unten Lösung gehen, hier habe ich Objekt von ModelClass in HashSet hinzugefügt.

ModelClass m1 = null;
int nth=scanner.nextInt();
for(int index=0;index<hashset1.size();index++){
    m1 = (ModelClass) itr.next();
    if(nth == index) {
        System.out.println(m1);
        break;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X