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