Tablica String - sprawdzanie ilości powtórzeń

0

Witam

Nie wiem jak zrobić taki program

Mam elementy tablicy ArrayList, otrzymuje je za pomocą
tab.get(0);
tab.get(1);
itd.
I teraz jak zrobić, żeby zliczyć w oddzielnej metodzie takie same elementy tablicy?

Przykład:
tab.get(0); // AA
tab.get(1); // BB
tab.get(2); // AA
tab.get(3); // AA

i żeby program wyświetlił mi:
AA 3
BB 1

Próbowałem różnymi sposobami, domyślam się że muszą być 2 pętle jedna która prześwietli wszystkie elementy tablica a druga ktora sprawdzi czy sa takie same elementy to zwiększy licznik.

0

Jedna pętla. Użyj

HashMap<String,Integer>
0

Może coś takiego.

String[] words = {"AA", "BB", "CC", "BB", "AA", "CC", "AA", "DD"};
for(int i = 0; i < words.length; ++i)
{
   if(words[i] == null)
        continue;

   int rep = 1;
   for(int k = i+1; k < words.length; ++k) {
        if(words[i].equals(words[k])) {
            words[k] = null;
            rep++;
        }
   }

   System.out.printf("%s %d\n", words[i], rep);
}
1
Map<String, Integer> counting = new HashMap<String, Integer>();
for(String element : arrayList){
    if(!counting.containsKey(element)){
        counting.put(element,0);
    }
    counting.put(element,couting.get(element)+1);
}
0
    Collections.frequency(Arrays.asList(twojaTablica), wartość);
0
niezalogowany napisał(a):
    Collections.frequency(Arrays.asList(twojaTablica), wartość);

Tylko że to jest O(n) na jedno wywołanie. Nawet jakbyś wcześniej zrobił HashSet z tej listy (znów O(n)) to nadal pesymistycznie miałbyś O(n2) jeśli wszystkie elementy są różne. Rozwiązanie z HashMap daje średni czas O(n), a z TreeMap daje pesymistyczny czas O(nlogn).

1 użytkowników online, w tym zalogowanych: 0, gości: 1