Collections.sort 的节目
Programs with Collections.sort
我有一个问题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
我:167:0.9426082679825352
我:158:0.9530518486042212
我:172:0.9700636428116204
我:174:0.9979504046750738
我:184:0.011633259785655103
我:187:0.03498090300936352
我:197:0.07038500463581565
我:181:0.07821108293051438
我:178:0.12297017501683705
...
完全是胡说八道。
有人可以提示我那里出了什么问题吗?
谢谢
====
蒂姆
与其编写自己的比较逻辑,不如试试这个:
@Override
public int compare(T o1, T o2) {
Double d1 = mapScore.get(o1);
Double d2 = mapScore.get(o2);
return d1.compareTo(d2);
}
因为 Double 包装器 class 实现了 Comparable 接口。
我有一个问题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
我:167:0.9426082679825352
我:158:0.9530518486042212
我:172:0.9700636428116204
我:174:0.9979504046750738
我:184:0.011633259785655103
我:187:0.03498090300936352
我:197:0.07038500463581565
我:181:0.07821108293051438
我:178:0.12297017501683705
...
完全是胡说八道。
有人可以提示我那里出了什么问题吗? 谢谢
====
蒂姆
与其编写自己的比较逻辑,不如试试这个:
@Override
public int compare(T o1, T o2) {
Double d1 = mapScore.get(o1);
Double d2 = mapScore.get(o2);
return d1.compareTo(d2);
}
因为 Double 包装器 class 实现了 Comparable 接口。