Welche Datenstruktur sollte ich verwenden, um zu speichern ein paar von strings in Java , wenn mein Ziel ist, finden Sie einzigartige Paare?
Ich bin ein Anfänger in Java. Ich habe einige Beispiel-Daten von Knoten:
A -> B
B -> F
C -> R
A -> B
B -> C
R -> C
Ich habe bereits 2 Listen: [A,B,C,A,B,R] und [B,F,R,B,C,C]
Jedoch, wie gehe ich bei der Speicherung der Paare [AB, BF, CR, AB, BC, RC], so dass ich finden kann, einzigartigen pairs? Durch die einzigartige, ich meine AB nicht gleich BA .
1) Also im Grunde möchte ich identifizieren, einzigartigen pairs.
2) ich möchte auch zählen die Anzahl der Zeiten, die jedes einzigartige paar ist erschienen.
BEARBEITET:
3) ich bin auch daran interessiert, wie viele verschiedene Knoten jeder Knoten eine Verbindung herstellt.
4) Und wie viele verschiedene Knoten eine Verbindung zu jedem Knoten
Ich bin kämpfen, um zu entscheiden, ob ich wirklich brauchen, um zu schreiben, meine eigene Klasse oder gibt es eine einfachere Methode?
Pair
Klasse und dann mit einem Satz zu zählen einzigartig und eine Liste zu halten. Sie müssen equals
und hashCode
Implementierungen.Hier ist eine nützliche Ressource für die Umsetzung Ihrer eigenen paar-Klasse: stackoverflow.com/questions/521171/...
I also want to count the number of times each unique pair has appeared.
was bedeutet es? wenn ein paar ist einzigartig, es erscheint nur einmal richtig?Das bedeutet: wenn wir 2 Paare (A,B) und (B,A). Sie sind 2 verschiedene Paare. Allerdings, wenn wir (A,B) und (A,B), dann gelten Sie als ein einzigartiges paar.
InformationsquelleAutor user2394904 | 2013-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hashtable (datastructure) sollte für Ihre Anforderung. In java könntest du überlegen, Typ
HashMap<String,Integer>
key ist der string, pair, Integer count:
etwas wie:
Die Komplexität der Suche nach einzigartigen pairs wäre
O(n)
BEARBEITEN
scheint es, dass putting-codes hier hilft zu erklären, die Lösung:
codes wurden nicht geschrieben in der IDE, so könnte es sein, typoes.
OP hat das schon getan, richtig? Wenn Verstand ich die Q richtig. lassen Sie mich nochmals Lesen.
OP nur erwähnt, Paaren; IMO ist es allgemein genug, dass es nicht wirklich wichtig, da die Frage über die zugrunde liegenden Daten-Struktur, nicht die Art der Daten. Dass der OP ein Anfänger, jedoch, wirft einen Schraubenschlüssel in den Werken, so bin ich nicht sicher, wie Sie Sie verallgemeinert eine Antwort sein sollte.
wenn es zwei arrays/Listen von string, so lange wie Sie haben die gleiche Länge/Größe, hashtable funktioniert trotzdem., noch
O(n)
for (int i=0;i<size/length;i++) String k = a[i]+b[i]
Vielen Dank für Eure Super Antworten. Da AB nicht gleich BA, ich habe 2 strings zusammen, und dann setzen Sie in ein hashset zu erhalten, setzen von strings ohne Duplikate. Ist dies eine praktikable Methode für das erhalten einzigartige Paare??
InformationsquelleAutor Kent
Können Sie erstellen Sie eine benutzerdefinierte Klasse zum speichern von Paaren von Zeichenketten, und verwenden Sie dann eine
HashMap
zu verfolgen die AnzahlDann können Sie
HashMap
für die Aufbewahrung tracking der Graf:InformationsquelleAutor srikfreak
Müssen Sie eine Klasse zu benennen paar:
Wenn Sie
Set
und füllen Sie es mit all-pair-Mädchen, haben Sie am Ende-up mit einzigartigen pairs:Wenn Sie
TreeSet
und machenPair
implement
Comparable
haben Sie eine sortierte Liste von PaarenWeiter, können Sie eine Kombination von
List
undSet
und gelten etwas Logik, um herauszufinden, die genaue Anzahl von Duplikaten etc., können auch erforschenremoveAll
undretainAll
für die Implementierung der Logik.Auch
Map
scheint nicht zu einem passen, in Ihren Fall, da eine Klasse wickeln kann erforderlich-mapping und eine Liste oder set hilft anwenden gewünschte Logik über mehrere Paare.Bekommen zählt die Gesamtzahl der original-Paare:
Eine Möglichkeit ist, beim sammeln von Paaren, die ich modifiziert habe meine Antwort. Mit
HashMap
zu verfolgen count scheint zu sein, ein hack (was funktioniert), aber sicherlich nicht der richtige Anwendungsfall für eine Karte.Ich denke der OP will zählen, wie viele Male ein paar findet. Für e.g A->B-paar tritt 10-mal, B->C tritt nur 5 mal usw. Für diesen Anwendungsfall, HashMap ist perfekt. Warum ist es ein hack? Ihre Lösung ist zählen insgesamt Paare nicht die Anzahl der einzelnen paar. Denke, von 'group by' - Funktionen in einer SQL-Abfrage.
+1 stimmt, ich verpasste Zuordnung der Zählung pro paar.
Frage bearbeitet wurde
InformationsquelleAutor harsh