有一个ArrayList<Coin>,每个Coin含有一个double value和一个String name,要求根据value的大小对ArrayList<Coin>降序排列,用comparator。能给出代码吗,关键是comparator的用法。部分代码如下:
public class CoinSortTester
{
    public static void main(String[] args)
    {
        ArrayList<Coin> a = new ArrayList<Coin>();
        a.add(new Coin(0.05, "Nickel"));
        a.add(new Coin(0.05, "Nickel"));
        a.add(new Coin(0.25, "Quarter"));
        a.add(new Coin(0.01, "Penny"));
        a.add(new Coin(0.1, "Dime"));
        Comparator<Coin> comp = new ReverseCoinComparator();
        Collections.sort(a, comp);
        System.out.println(a);
        System.out.println("Expected: [Coin[value=0.25,name=Quarter],
                            Coin[value=0.1,name=Dime], Coin[value=0.05,name=Nickel],
                            Coin[value=0.05,name=Nickel],
                            Coin[value=0.01,name=Penny]]");
    }
}

解决方案 »

  1.   

    看下这个帖子
    http://lgstarzkhl.iteye.com/blog/515329
      

  2.   

    参考:http://zhubin215130.iteye.com/blog/443380
      

  3.   

    有两种方法,给你一种。
    在Coin类中加上public class Coin implements Comparable<Coin>{
    // 实现compareTo()方法
    public int compareTo(Coin o) {
    int thisValue = (int)(this.getValue()*10000);
    int comScore = (int)(o.getValue()*10000);
    return comScore - thisScore;
    }
    }// 调用时直接
    Collections.sort(new Arraylist<Coin>);
      

  4.   

    int thisValue = (int)(this.getValue()*10000);
    int comScore = (int)(o.getValue()*10000);这两句什么意思,为什么要*10000呢
      

  5.   

    不*10000的话,double强制转换成int会丢失精度,如1.2,1.3这样比起来是相等的。double其实*100也就够了