列表是
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 :(得分:2)
首先,计算字符串的出现次数,然后使用Map
进行排序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));
}
}
答案 1 :(得分:0)
您可以创建一个自定义列表,其中包含一个地图,用于记录列表中元素的频率。
pulic class FrequencySortList<E> extend ArrayList<E> {
private Map<E,Integer> frequency = new HashMap<E,Integer>();
.....
}
答案 2 :(得分: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));
}
list2将打印:
apple
ball
cat
或者你可以像使用评论
中提到的jahroy一样使用这一行List list2 = new ArrayList<String>(new TreeSet<String>(list));
答案 3 :(得分: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());
}