List<String> list = new ArrayList<String>();
list.add("apple");
list.add("ball");
list.add("apple");
list.add("cat");
list.add("ball");
現在我要對此列表進行排序與蘋果,球的頻率,貓
我得輸出爲:
apple
ball
cat
List<String> list = new ArrayList<String>();
list.add("apple");
list.add("ball");
list.add("apple");
list.add("cat");
list.add("ball");
現在我要對此列表進行排序與蘋果,球的頻率,貓
我得輸出爲:
apple
ball
cat
您可以創建包含註冊列表中元素頻率的映射的自定義列表。
pulic class FrequencySortList<E> extend ArrayList<E> {
private Map<E,Integer> frequency = new HashMap<E,Integer>();
.....
}
首先,計算串的發生,然後進行排序,通過使用地圖
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));
}
}
試試這個,
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));
OP想要按每個元素的出現次數對列表進行排序。這將生成按字母順序排列的唯一元素列表。另外,你可以達到與上面代碼相同的效果:'Set
首先你需要做簡單的類的模型:
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());
}
不明白你的問題.... – Ajit 2013-03-13 05:47:44
請分享你已經嘗試過,我們很樂意提供幫助。您可能也想嘗試谷歌。如果我按頻率搜索「_java排序列表」,那麼第一個結果會讓我在此網站上有一個很好的答案。 – jahroy 2013-03-13 05:49:50
已經在同一論壇中回答。請參考這裏 http://stackoverflow.com/questions/10158793/sorting-words-in-order-of-frequency-least-to-greatest – Joe2013 2013-03-13 05:52:44