上节文章遇到了一个问题:student类没有实现Comparable接口,不是compare()方法的实现类。

所以在执行Collection.Sort()时找不到compare()方法,导致程序报错。

一、知识点

(1)错误的代码示例

student类没有实现Comparable方法。

执行时报出找不到方法的错误。

(2)compare的必要性

编译器排序的时候,依据的是自然顺序,排序的依据已经是定死了的。

举个例子:一群学生排队,默认按照身高来排,从矮到高站成一堆。现在我们想按照学生的年龄去排序,该怎么实现呢?

在java中,两个对象想要进行排序,那么两者必须是可以比较的。我们用Comparable来表示这两个对象是可以比较的。

Comparable实现了默认比较规则,就像是之前的身高排序。如果我们想用到年龄排序,就要覆盖默认排序方法,实现临时的排序规则。

(3)comparable接口是什么?如何使用?

需要对一个对象进行排序时,就应该实现Comparable接口,并且实现其唯一的方法compareTo()。

当调用Arrays.sort()方法时会回调compareTo()方法,获取排序规则。

下面解决一些问题:

1.如何生成3个不重复的1000以内的随机正整数作为学生ID?

可以这样生成:

完善代码:

比较简单的实现。

2.(“1”, “小明”)和(1+””,”小明”)有区别吗?

从代码角度看,没什么太大区别,写法不同而已。编译器也会将1 + “”视为1与一个空字符串相连接,将其转换为String类型,实现和”1″一样的效果。

二、总结

如果一个对象需要自比较,就需要实现Comparable接口。String、Integer自己就实现了Comparable接口,可完成比较大小操作。

如果想在list容器中排序自定义类,需要让这个自定义类实现Comparable接口。

如果Collections类的sort方法在排序时不指定Comparator,那就以自然顺序排序。所谓自然顺序就是实现Comparable接口设定的排序方式,也可以自定义排序方法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注