2013-03-13 75 views
-1

名單是排序中有一個列表中字符串的頻率

List<String> list = new ArrayList<String>(); 

list.add("apple"); 
list.add("ball"); 
list.add("apple"); 
list.add("cat"); 
list.add("ball"); 

現在我要對此列表進行排序與​​蘋果,球的頻率,貓

我得輸出爲:

apple 
ball 
cat 
+0

不明白你的問題.... – Ajit 2013-03-13 05:47:44

+1

請分享你已經嘗試過,我們很樂意提供幫助。您可能也想嘗試谷歌。如果我按頻率搜索「_java排序列表」,那麼第一個結果會讓我在此網站上有一個很好的答案。 – jahroy 2013-03-13 05:49:50

+1

已經在同一論壇中回答。請參考這裏 http://stackoverflow.com/questions/10158793/sorting-words-in-order-of-frequency-least-to-greatest – Joe2013 2013-03-13 05:52:44

回答

0

您可以創建包含註冊列表中元素頻率的映射的自定義列表。

pulic class FrequencySortList<E> extend ArrayList<E> { 

    private Map<E,Integer> frequency = new HashMap<E,Integer>(); 


    ..... 




} 
2

首先,計算串的發生,然後進行排序,通過使用地圖

List<String> list = new ArrayList<String>(); 
list.add("apple"); 
list.add("ball"); 
list.add("apple"); 
list.add("cat"); 
list.add("ball"); 
Map<String, Integer> map = new HashMap<String, Integer>(); 
for (String s : list) { 
    if (map.containsKey(s)) { 
     map.put(s, map.get(s) + 1); 
    } else { 
     map.put(s, 1); 
    } 
} 
ValueComparator<String, Integer> comparator = new ValueComparator<String, Integer> (map); 
Map<String, Integer> sortedMap = new TreeMap<String, Integer> (comparator); 
sortedMap.putAll(map); 

List<String> sortedList = new ArrayList<String> (sortedMap.keySet()); 

System.out.println(sortedMap); 
System.out.println(sortedList); 

} 

static class ValueComparator<K, V extends Comparable<V>> implements Comparator<K> { 

Map<K, V> map; 

public ValueComparator(Map<K, V> base) { 
    this.map = base; 
} 

@Override 
public int compare(K o1, K o2) { 
    return map.get(o2).compareTo(map.get(o1)); 
} 
} 
0

試試這個,

List list = new ArrayList(); 
     list.add("apple"); 
     list.add("ball"); 
     list.add("apple"); 
     list.add("cat"); 
     list.add("ball"); 

     // sort the list 
     Collections.sort(list); 

這裏您的列表包含:

apple 
apple 
ball 
ball 
cat 
     List list2 = new ArrayList(); 

     for(int i=0;i<list.size();i++) 
     { 
      if(!list2.contains(list.get(i))) 
      { 
       list2.add(list.get(i)); 
      } 

     } 
     for(int i=0;i<list2.size();i++) 
     { 

      System.out.println(list2.get(i)); 
     } 

列表2將打印:

apple 
ball 
cat 

,或者你可以做同樣的事情用這個單一線jahroy在評論中提到

List list2 = new ArrayList<String>(new TreeSet<String>(list)); 
+0

OP想要按每個元素的出現次數對列表進行排序。這將生成按字母順序排列的唯一元素列表。另外,你可以達到與上面代碼相​​同的效果:'Set s = new TreeSet (list);',它將創建一個唯一元素的排序集合。 – jahroy 2013-03-13 06:06:44

0

首先你需要做簡單的類的模型:

public class Thing { 

     String name; 
     int total; 

     public Thing(String name){ 
      this.name=name; 
      total=1; 
     } 

     //setter and getter 
    } 

那麼你需要計算該事物出現的頻率:

List list = new ArrayList(); 
list.add("apple"); 
list.add("ball"); 
list.add("apple"); 
list.add("cat"); 
list.add("ball"); 
System.out.println(list.size()); 
List list2 = new ArrayList(); 
for(int i=0;i<list.size();i++){ 
    System.out.println(list.get(i)); 
    Thing thing= new Thing(list.get(i).toString()); 
    if(list2.size()<1){ 
     list2.add(thing); 
    }else { 
     boolean insert=true; 
     int x=0; 
     for(int j=0;j<list2.size();j++){ 
      Thing toCompare=(Thing)list2.get(j); 
      if(toCompare.getName().equals(thing.getName())){ 
       insert=false; 
       x=j; 
       thing.setTotal(thing.getTotal()+1); 
       break; 
      } 
     } 
     if(insert==true){ 
      list2.add(thing); 
     }else{ 
      list2.set(x, thing); 
     } 
    } 
} 

for(int i=0;i<list2.size();i++){ 
    Thing thing=(Thing)list2.get(i); 
    System.out.println(thing.getName()+" : "+thing.getTotal()); 
} 
相關問題