利用 Comparable 接口创建自己的类的排序顺序,只是实现 compareTo() 方法的问题。通常就是依赖几个数据成员的自然排序。同时类也应该覆盖 equals() 和 hashCode() 以确保两个相等的对象返回同一个哈希码。
这个接口的作用:如果数组或者集合中的(类)元素实现了该接口的话 , 我们就可以调用 Collections.sort 和 Arrays.sort 排序,或应用于有序集合 TreeSet 和 TreeMap 中。
下面设计一个有序的类 Person ,它实现 Comparable 接口,以年龄为第一关键字,姓名为第二关键字升序排序。
Person.java
package com.zj.sort.comparable;
public class Person implements Comparable<Person> {
private int age ;
private String name ;
public Person( int age, String name) {
this . age = age;
this . name = name;
}
public int compareTo(Person person) {
int cop = age - person.getAge();
if (cop != 0)
return cop;
else
return name .compareTo(person. name );
}
public int getAge() {
return age ;
}
public String getName() {
return name ;
}
public int hashCode() {
int result = 17;
result = 37 * result + age ;
result = 37 * result + name .hashCode();
return result;
}
public boolean equals(Object o) {
if (!(o instanceof Person))
return false ;
Person person = (Person) o;
return ( age == person. age ) && ( name .equals(person. name ));
}
public String toString() {
return ( age + "{" + name + "}" );
}
}
|
2.1 测试 Arrays.sort ()方法
ArraysSortUnit.java
package com.zj.sort.comparable;
import java.util.Arrays;
import com.zj.compare.Person;
public class ArraysSortUnit {
public static void main(String[] args) {
Person[] ps = { new Person(20, "Tom" ), new Person(20, "Jeff" ),
new Person(30, "Mary" ), new Person(20, "Ada" ),
new Person(40, "Walton" ), new Person(61, "Peter" ),
new Person(20, "Bush" ) };
System. out .println(Arrays.toString (ps));
Arrays.sort (ps);
System. out .println(Arrays.toString (ps));
}
}
分享到:
相关推荐
Comparator接口与Comparable接口的区别 Comparator接口与Comparable接口是Java语言中两个重要的接口,它们都是用于比较和排序自定义类的对象的大小的。虽然它们两个都是用于比较的接口,但是它们有着不同的实现方式...
通过简单的例子初步了解Comparable和Comparator的使用,注释很详细
java通过Comparable接口实现字符串比较大小排序的简单实例
1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort ...
主要介绍了java 实现Comparable接口排序,升序、降序、倒叙,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Java8HashMap键与Comparable接口编程开发技术共3页.pdf.zip
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧
实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。 此 接口只有一个方法...
【IT十八掌徐培成】Java基础第12天-02.TreeSet实现与Comparable接口.zip
下面小编就为大家带来一篇java中实现Comparable接口实现自定义排序的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
创建名为ComparableCircle的类,它继承自Circle类,并实现Comparable接口。画出UML图并实现compareTo方法,使其根据面积比较两个圆。编写一个测试程序求出ComparableCircle对象的两个实例中的较大者。
本篇文章是对java比较器Comparable接口与Comaprator接口进行了详细的分析介绍,需要的朋友参考下
【推选】Comparable自比较接口PPT资料.pptx
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个...
当且仅当要使用的对象实现Comparable接口时,我们也可以创建不带Comparator对象的SortedList。 用法 我们将像创建Java中的任何ArrayList一样创建SortedList: SortedList sortedlist = new SortedList(comparator); ...
Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
主要介绍了详解Java中Comparable和Comparator接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
文章目录简介ComparableComparator举个例子 java中Comparable和Comparator的区别 ...实际上Comparable接口只定义了一个方法: public int compareTo(T o); 实现这个接口的类都需要实现compareTo方法,表示两个
我们定义了一个 Comparable 接口,并让 Circle 和 Cylinder 实现这个接口,以便于比较它们的大小。 五、实验总结 通过这个实验,我们学习了抽象类、接口、Cloneable 接口和多态性的概念,并掌握了如何使用它们来...