需要解释Java中的自然排序

时间:2012-07-19 02:31:51

标签: java sorting collections

你会举一个例子“选择课堂内的自然顺序。”

我在docs.oracle中读过Object Ordering但是没有说明在有多个元素的情况下如何决定自然排序。如果一个班级有姓名,年龄,地址,电话号码等元素;被选中哪一个做自然排序?

然后,我在这里读到一篇文章,可以决定自然顺序。我是一个Java新手,试图解决家庭作业并首次尝试收集框架。

2 个答案:

答案 0 :(得分:2)

是的,你是对的,可以决定自然顺序。您将实现Comparable并编写自己的compareTo()方法实现。在那种方法中,你决定胜过什么。

答案 1 :(得分:1)

我更喜欢Comparator类,即使实现看起来有点重量级。原因在于,对于某些对象,并不总是清楚被比较的是什么。使用.compareTo()(即实现IComparable)并不像显式比较器那样清晰。

BasketballPlayer player1 = new BasketballPlayer("Smith", 2.02);
BasketballPlayer player2 = new BasketballPlayer("Jones", 1.95);

List<BasketballPlayer> playersByHeight = new ArrayList<BasketballPlayer>();
List<BasketballPlayer> playersByName = new ArrayList<BasketballPlayer>();
playersByHeight.add(player1);
playersByHeight.add(player2);
playersByName.add(player1);
playersByName.add(player2);

Collections.sort(playersByName, new Comparator<BasketballPlayer>() {
    @Override
    public int compare(BasketballPlayer o1, BasketballPlayer o2) {
        return o1.getName().compareTo(o2.getName());
    }
});
Collections.sort(playersByHeight, new Comparator<BasketballPlayer>() {
    @Override
    public int compare(BasketballPlayer o1, BasketballPlayer o2) {
        return o1.getHeight().compareTo(o2.getHeight());
    }
});

这里我使用匿名类,但如果你愿意,你可以让比较器成为他们自己的(命名)类。