Die Ausgabe hier dient nur dazu, das erwartete Ergebnis zu demonstrieren.
Wahrscheinlich nicht, aber es sollte für Sie einfach genug sein, eine Methode selbst zu implementieren, wenn man bedenkt, wie einfach die Aufgabe ist. Es wird in O (n) funktionieren, egal was ich denke (es sei denn, Sie treffen einige Annahmen über das Sortieren, um diese Geschwindigkeit zu erhöhen).
– Gnom
11. November 11 um 18:59 Uhr
Damian
List asList = Arrays.asList(array);
Set<String> mySet = new HashSet<String>(asList);
for(String s: mySet){
System.out.println(s + " " + Collections.frequency(asList,s));
}
Meiner Erfahrung nach ist Collections.frequency zu langsam. Vermeiden Sie es, wenn die Leistung ein Problem darstellt.
– akshayb
2. Juni 14 um 7:10 Uhr
Nicht wirklich, wenn es sich um ein HashSet oder eine HashMap handelt.
Sie könnten eine verwenden MultiSet aus Google Collections/Guava oder a Bag von ApacheCommons.
Wenn Sie anstelle eines Arrays eine Sammlung haben, können Sie verwenden addAll() um den gesamten Inhalt zu der obigen Datenstruktur hinzuzufügen, und wenden Sie dann die an count() Methode zu jedem Wert. EIN SortedMultiSet oder SortedBag würde Ihnen die Artikel in einer definierten Reihenfolge geben.
Google Collections bietet tatsächlich sehr bequeme Möglichkeiten, von Arrays zu a zu wechseln SortedMultiset.
Der Link zu Tasche ist 404.
– james.garriss
21. November 13 um 20:53 Uhr
Ich habe getCardinalityMap() von org.apache.commons.collections.CollectionUtils verwendet.
– Tuan
17. September 14 um 17:54 Uhr
Ich habe eine Lösung dafür geschrieben, um mich selbst zu üben. Es scheint nicht annähernd so großartig zu sein wie die anderen geposteten Antworten, aber ich werde es trotzdem posten und dann lernen, wie man dies auch mit den anderen Methoden macht. Genießen:
public static Integer[] countItems(String[] arr)
{
List<Integer> itemCount = new ArrayList<Integer>();
Integer counter = 0;
String lastItem = arr[0];
for(int i = 0; i < arr.length; i++)
{
if(arr[i].equals(lastItem))
{
counter++;
}
else
{
itemCount.add(counter);
counter = 1;
}
lastItem = arr[i];
}
itemCount.add(counter);
return itemCount.toArray(new Integer[itemCount.size()]);
}
public static void main(String[] args)
{
String[] array = {"name1","name1","name2","name2", "name2", "name3",
"name1","name1","name2","name2", "name2", "name3"};
Arrays.sort(array);
Integer[] cArr = countItems(array);
int num = 0;
for(int i = 0; i < cArr.length; i++)
{
num += cArr[i]-1;
System.out.println(array[num] + ": " + cArr[i].toString());
}
}
das funktioniert, könnte aber wenig über hm.put(x, hm.get(x)+1) erklären; Teil ? Vielen Dank
– ikel
21. Juli 21 um 16:03 Uhr
Ich meinte, wie verhält sich hm.get(x) eigentlich wie ein Zähler, nicht wie ein Artikelwert?
– ikel
21. Juli 21 um 16:12 Uhr
@ikel Wenn der Schlüssel (in diesem Fall x) bereits im hm vorhanden ist, holen Sie sich den entsprechenden Wert, erhöhen Sie ihn um eins und speichern Sie ihn zurück.
– Deva44
22. Juli 21 um 6:04 Uhr
Jason Rogers
Ich würde eine Hashtabelle verwenden, bei der der Schlüssel das Element des Arrays (hier Zeichenfolge) und den Wert eine ganze Zahl enthält.
Gehen Sie dann die Liste durch und tun Sie Folgendes:
for(String s:array){
if(hash.containsKey(s)){
Integer i = hash.get(s);
i++;
}else{
hash.put(s, new Interger(1));
}
das funktioniert, könnte aber wenig über hm.put(x, hm.get(x)+1) erklären; Teil ? Vielen Dank
– ikel
21. Juli 21 um 16:03 Uhr
Ich meinte, wie verhält sich hm.get(x) eigentlich wie ein Zähler, nicht wie ein Artikelwert?
– ikel
21. Juli 21 um 16:12 Uhr
@ikel Wenn der Schlüssel (in diesem Fall x) bereits im hm vorhanden ist, holen Sie sich den entsprechenden Wert, erhöhen Sie ihn um eins und speichern Sie ihn zurück.
– Deva44
22. Juli 21 um 6:04 Uhr
naveen Tekkem
Dies kann auf sehr einfache Weise mit Sammlungen erfolgen. Finden Sie den Code unten
Wahrscheinlich nicht, aber es sollte für Sie einfach genug sein, eine Methode selbst zu implementieren, wenn man bedenkt, wie einfach die Aufgabe ist. Es wird in O (n) funktionieren, egal was ich denke (es sei denn, Sie treffen einige Annahmen über das Sortieren, um diese Geschwindigkeit zu erhöhen).
– Gnom
11. November 11 um 18:59 Uhr