Java 使用Collections.sort的程序

Java 使用Collections.sort的程序,java,sorting,collections,Java,Sorting,Collections,我在收集方面有问题。排序我无法解决 我使用自定义比较器比较基于哈希表的整数: public class HashtableComparator<T> implements Comparator<T> { public HashtableComparator(Map<T,Double> mapScore) { this.mapScore=mapScore; } @Override public int compare(T o1, T o2) {

我在收集方面有问题。排序我无法解决

我使用自定义比较器比较基于哈希表的整数:

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;
}
公共类HashtableComparator实现Comparator{
公共HashtableComparator(Map mapScore)
{
这个.mapScore=mapScore;
}
@凌驾
公共整数比较(tO1,tO2){
//TODO自动生成的方法存根
双d1=mapScore.get(o1);
双d2=mapScore.get(o2);
如果(d1d1)
返回1;
返回0;
}
公众双倍得分(T)
{
返回mapScore.get(t);
}
私人地图;
}
现在我按以下方式对数字进行排序:

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));
 }
 }
publicstaticvoidmain(字符串[]args)
{
HashMap=newHashMap();
ArrayList li=新的ArrayList();
Random rn=新的Random();

对于(int i=0;i而不是编写自己的比较逻辑,请尝试以下方法:

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

因为双包装器类实现了可比较的接口。

使用
Double.compare(d1,d2);
而不是compare logica的自定义实现,谢谢,现在它可以工作了。我刚刚看到我的比较器中也有一个错误,else的情况应该是:else如果d2