Ist es ein Weg, um die häufigsten String
in einem ArrayList
?
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("test");
list.add("hello");
list.add("test");
Sollte das Wort "test" aus dieser Liste ["test","test","hello","test"]
Ja, es ist ein Weg. Aber keine direkte. Sie haben, code zu schreiben.
Ja, verwenden Sie die Karte zum Beispiel HashMap
InformationsquelleAutor EspenG | 2014-04-10
Das Rad nicht neu erfinden und verwenden Sie die
frequency
Methode derCollections
Klasse:Wenn Sie brauchen, um zählen die Vorkommnisse für alle Elemente, verwenden Sie eine Karte und Schleife geschickt 🙂
Oder legen Sie Ihre Liste in ein Set und Schleife auf jedes element des Satzes mit der
frequency
Methode oben. HTHBEARBEITEN /Java-8: Wenn du Lust auf eine funktionelle, Java 8 ein-Zeiler-Lösung mit lambdas versuchen:
w->w
verwendenFunction.identity()
dies bedeutet nicht Rückkehr die Häufigkeit der jedes Wort in jedem String. Es gibt die wiederkehrenden String.. Wie kann ich diese anpassen, um die Rückkehr der häufigsten Wörter in einer ArrayList von Strings
Ich persönlich finde
w -> w
weniger wortreich in einer Sprache, wo mehr frische wäre nicht sehr weh. Jede starke argument zugunsten derFunction.identity()
?InformationsquelleAutor VH-NZZ
In der Statistik nennt man das den "Modus". Vanille-Java-8-Lösung sieht wie folgt aus:
Welche ergibt:
jOOλ ist eine Bibliothek, die unterstützt
Modus()
auf streams. Das folgende Programm:Ergibt:
(disclaimer: ich arbeite für die Firma, die hinter jOOλ)
InformationsquelleAutor Lukas Eder
Können Sie eine
HashMap<String,Integer>
. Wenn der String bereits in der Karte, erhöhen Sie dessen Schlüssel von einem, sonst, fügen Sie es der Karte.Beispiel:
Dann davon ausgehen, es ist "someValue" wieder, die Sie tun können:
Da die Schlüssel "someValue" 1 ist, jetzt, wenn Sie es, der Schlüssel wird 2.
Danach können Sie einfach gehen Sie durch die anzeigen und extrahieren Sie die Schlüssel , hat die höchste Wert.
ich nicht schreiben, eine vollständige Lösung ist, versuchen Sie zu konstruieren, wenn Sie Probleme haben, posten Sie es in einer anderen Frage. Beste Praxis ist es, zu lernen, durch sich selbst.
InformationsquelleAutor Maroun
Ich denke, der beste Weg, dies zu tun ist mithilfe von Karten mit zählt.
Und iterieren über das array ausfüllen dieser Karte:
Schließlich können Sie die wiederholte element der Iteration über die Karte:
Und zeigen die häufigsten-string:
InformationsquelleAutor Pablo Francisco Pérez Hidalgo
Als pro Frage, Speziell nur um Wort, nicht die Anzahl der Zeiten, (D. H. Wert der Taste).
InformationsquelleAutor ChandraBhan Singh
Könnte man eine
HashMap<String,Integer>
. Schleife durch das array, Sie können überprüfen für jedenString
wenn es nicht schon einen Schlüssel von deinerHashMap
ist, fügen Sie es und setzen Sie den Wert auf 1, wenn es ist, erhöhen Sie den Wert um 1.Dann haben Sie eine
HashMap
mit allen einzigartigenString
s und eine zugehörige Nummer Angabe deren Höhe in das array.InformationsquelleAutor LionC
Wenn sich jemand finden müssen, beliebtesten vom üblichen String [] - array (Verwendung von Listen):
InformationsquelleAutor Максим Скрипченко
ich weiß, das braucht mehr Zeit, um zu implementieren, aber Sie können heap-Datenstruktur durch die Speicherung der Knoten, die Anzahl und die string-Informationen
InformationsquelleAutor fatih tekin
Können Sie Guave ist Multiset:
InformationsquelleAutor manicka
public class StringChecker {
}
InformationsquelleAutor Mahesh Kshirsagar
Mit dieser Methode, wenn es mehr als eine häufigsten Elemente in der ArrayList, erhalten Sie alle von Ihnen, indem Sie in einer neuen ArrayList.
InformationsquelleAutor jaraipali
Gibt es eine Menge von Antworten, die darauf hindeutet, HashMaps. Ich weiß wirklich nicht, wie Sie, weil Sie haben, Durchlaufen Sie noch einmal trotzdem. Vielmehr würde ich die Liste Sortieren
und dann in einer Schleife durch. Etwas ähnliches
sollte es tun.
O(N)
Komplexität. Ihr Algorithmus verwendet die Sortierung istO(N log N)
Komplexität, das ist sicherlich schlimmer.Ich Stimme mit Bex. Art ist eigentlich keine schlechte Idee meiner Meinung nach. Es ist einfach zu implementieren und hat ein O(nlogn) Zeit-Komplexität O(1) Speicherplatz. Während die Nutzung hashmap und priorityqueue ist O(nlogn) Zeit-Komplexität O(n) Speicherplatz. Da legen Sie in eine pq ist O(logn), Durchlaufen Sie die Einträge der Hashmap und legen Sie Sie in pq ist O(nlogn) in den schlimmsten Fällen. Korrigieren Sie mich, wenn ich falsch bin. docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
InformationsquelleAutor Bex