带Collections.sort的程序

时间:2015-02-20 09:07:21

标签: java sorting collections

我遇到Collections.sort的问题我无法解决。

我使用自定义比较器来比较基于散列表的整数:

public class HashtableComparator<T> implements Comparator<T> {

public HashtableComparator(Map<T,Double> mapScore)
{
    this.mapScore=mapScore;
}
@Override
public int compare(T o1, T o2) {
    // TODO Auto-generated method stub
    double d1=mapScore.get(o1);
    double d2=mapScore.get(o2);

    if (d1<d2)
        return -1;
    else if (d2>d1)
        return 1;
    return 0;
}



public double getScore(T t)
{
    return mapScore.get(t);
}



private Map<T,Double> mapScore;
}

现在我按以下方式对数字进行排序:

public static void main(String[] args)
{
  HashMap<Integer,Double> map=new HashMap<Integer,Double>();

  ArrayList<Integer> li=new ArrayList<Integer>();
  Random rn=new Random();
  for (int i=0;i<200;i++)
  {
    li.add(i);
    double r=rn.nextDouble();
    map.put(i, r);
  }
  ArrayList<Integer> li2=new ArrayList<Integer>();
  HashtableComparator<Integer> htComparator=
    new HashtableComparator<Integer>(map);

  Collections.sort(li,htComparator);
  for (Integer i1: li)
  {
    System.out.println("i: "+i1+": "+map.get(i1));
 }
 }

输出如下:

... 我:154:0.9367974470241198

i:167:0.9426082679825352

i:158:0.9530518486042212

我:172:0.9700636428116204

i:174:0.9979504046750738

i:184:0.011633259785655103

i:187:0.03498090300936352

i:197:0.07038500463581565

我:181:0.07821108293051438

i:178:0.12297017501683705

...

完全没有森林。

有人能给我一个暗示那里出了什么问题吗? 感谢

====

1 个答案:

答案 0 :(得分:3)

不要编写自己的比较逻辑,试试这个:

    @Override
    public int compare(T o1, T o2) {
       Double d1 = mapScore.get(o1);
       Double d2 = mapScore.get(o2);
       return d1.compareTo(d2);
   }

因为Double包装器类实现了Comparable接口。