-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
4

4 に答える 4

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));
}
}
于 2013-03-13T05:56:00.250 に答える
0

リスト内の要素の頻度を登録するマップを含むカスタマイズされたリストを作成できます。

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

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


  .....




}
于 2013-03-13T05:55:00.273 に答える
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());
}
于 2013-03-13T06:05:16.690 に答える
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として、この1行を使用して同じことを行うことができます

List list2 = new ArrayList<String>(new TreeSet<String>(list));
于 2013-03-13T06:01:47.740 に答える