2014-02-07 2 views
0

Предположим, у меня есть следующий список.Подсчет числа строк в Arraylist

List<String> list=new ArrayList<String>(); 
list.add("sultan"); 
list.add("Masum"); 
list.add("sultan"); 
list.add("Sorry"); 
list.add("sultan"); 
list.add("Masum"); 
list.add("sultan"); 
list.add("Tarek"); 
list.add("sultan"); 

Я хочу знать количество появления каждой строки в Arraylist. Как я могу это сделать ? И я также хочу знать строку, которая произошла в этом Arraylist в наивысшие времена. В этом конкретном примере ответом является «Султан».

+1

возможно дубликат [Как считать вхождение элемента в списке] (HTTP://stackoverflow.com/questions/505928/how-to-count-occurrence-of-an-element-in-a-list) –

ответ

1

Проверить это

Collections.frequency и THIS EXAMPLE

из этого примера:

System.out.println("\nExample 1 - Count 'a' with frequency"); 
System.out.println("a : " + Collections.frequency(list, "a")); 

System.out.println("\nExample 2 - Count all with frequency"); 
Set<String> uniqueSet = new HashSet<String>(list); 
for (String temp : uniqueSet) { 
    System.out.println(temp + ": " + Collections.frequency(list, temp)); 
} 

System.out.println("\nExample 3 - Count all with Map"); 
Map<String, Integer> map = new HashMap<String, Integer>(); 

for (String temp : list) { 
    Integer count = map.get(temp); 
    map.put(temp, (count == null) ? 1 : count + 1); 
} 
printMap(map); 

System.out.println("\nSorted Map"); 
Map<String, Integer> treeMap = new TreeMap<String, Integer>(map); 
printMap(treeMap); 
3

Это может быть полезно

int occ = Collections.frequency(list, "Masum"); 
+0

И я также хочу знать строку, которая произошла в этом arraylist в самые высокие времена. В этом конкретном примере ответом является «Султан». –

+0

Перечислите по списку, сравнивая каждую 'occ' с' maximum', запомнив в памяти. Конечно, если 'occ> maximum', вы должны написать где-то значение элемента фактического списка. – wawek

2

Если вы хотите, чтобы все строки в первом списке что-то вы можете сделать это:

import java.util.*; 

import java.util.Map.Entry; 
//... 

Set<String> uniques = new HashSet(list); 
Map<String, Integer> counts = new HashMap<String, Integer>(); 

for (String elem : uniques) { 
    counts.put(elem, Collections.frequency(list, elem)); 
} 

В итоге у вас будет счет для каждой строки на карте. Положив один на один ... это будет сделать следующее:

  • путем создания набора из первоначального списка, вы будете иметь каждую строку из списка, после чего вы «ходить» список и вычислить для каждой частоты для любая строка.

Что касается самой высокой частоты, можно использовать метод Collections.max на входе установлен так:

Collections.max(counts.entrySet(), new Comparator<Entry<String, Integer>>() { 
     @Override 
     public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { 
      return (o1.getValue() - o2.getValue()); 
     } 
    }) 
+0

Что будет возвращено Collections.Max? Можете ли вы назначить это в переменной? –

+0

Можете ли вы показать значение String и integer, возвращаемое Collections.Max в System.out.println(); ?? –

+0

@osimerpothe - выход будет ключевым = значение. На вашем выходе: султан = 5. Если вам нужна строка: результат max .getKey() и ее счетчик: результат max .getValue() –

Смежные вопросы