Ich habe eine String[]
, originalStringArray
, die Duplikate in ihnen hat. Also {"dog","cat","dog","fish","dog","cat"}
.Wie gibt man nur ArrayList von Strings mit minimaler Anzahl von Vorkommen zurück?
Ich wollte eine Funktion machen, die nur die Strings zurückgibt, die genau eine bestimmte Anzahl von Malen auftreten. Wenn ich hier 3 sagte, würde ich "Hund", aber nicht "Katze" zurückgeben.
Hier ist mein aktueller Code:
public ArrayList<String> returnMultiples(String[] originalStringArray,int requiredCount){
ArrayList<Integer> mCount = new ArrayList<>();
List<String> list = Arrays.asList(originalStringArray);
ArrayList<String> result = new ArrayList<>();
// Count occurrences in original string
for(String item: originalStringArray){
mCount.add(Collections.frequency(list,item));
}
// If frequency is equal to count, add to array list
for(int i=0; i<mCount.size(); i++){
if(mCount.get(i) == requiredCount){
result.add(originalStringArray[i]);
}
}
return result;
}
Das Problem, das ich habe ist, dass ich irgendwo gelesen, dass die Sammlungen Bibliothek ist sehr langsam und zieht, und es scheint auch, wie, dass diese Methode HashSets und Tabellen reduziert wird unter Verwendung von . Leider weiß ich nicht, wie ich das machen soll. Gibt es einen besseren Weg, dies zu tun?
Zitierweise anzeigen. Die Java Collections-Bibliotheken sind stark optimiert. Leute, die sagen, dass sie langsam sind, benutzen sie normalerweise nicht richtig. Du hast recht. Sie möchten eine Map, um dieses Problem zu lösen. Wenn Sie die ursprüngliche Reihenfolge der Darstellung beibehalten möchten, verwenden Sie eine OrderedHashMap. –
Gene
Leistung ist nicht wirklich wichtig, wenn Sie mit kleinen Datenmengen meiner Meinung nach umgehen. Wenn Sie Tausende oder mehr Elemente verarbeiten, beginnt die Leistung, und selbst bei dieser Menge nur noch ein kleiner Teil. Davon abgesehen können Sie kein Set verwenden, da jedes Set-Element eindeutig sein muss. Ich würde jedes Element und sein Vorkommen während der ersten Array-Schleife in eine Hashmap einfügen.Dann müssen Sie die Hashmap-Schleife durchlaufen und die Schlüssel auswählen, die Ihren Vorkommenskriterien entsprechen. –
'Multiset' aus der [Guava-Bibliothek] (https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained) ist etwas genau für diesen Zweck entwickelt. –