2014-02-07 29 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.frequencyTHIS 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

我也想知道在最高時間在這個數組列表中出現的字符串。對於這個特定的例子,答案是「蘇丹」。 –

+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

可以顯示由System.out.println()中的Collections.Max返回的字符串和整數的值; ?? –

+0

@osimerpothe - 輸出將是key = value。在你的輸出上:sultan = 5。如果需要字符串:max .getKey()的結果及其計數:最大.getValue()的結果 –

相關問題