在TreeSet中实现存储自定义对象,并且能够按照特定的顺序排序
2015-04-20 17:29
573 查看
package cn.itcast.demo; import java.util.*; class Person implements Comparable { private String name; private int age; private int score; Person(String name,int age,int score) { this.name=name; this.age=age; this.score=score; } public int getAge() { return age; } public String getName() { return name; } public int getScore() { return score; } public int compareTo(Object obj) { if (!(obj instanceof Person)) { throw new RuntimeException("吊爆了!"); } Person p=(Person)obj; if (this.age>p.age) { return 1; } if (this.age==p.age) { return this.name.compareTo(p.name); } return -1; } } class TreeSetTest1 { public static void main(String[] args) { //TreeSet t=new TreeSet(new Mycompare()); //按照姓名 //TreeSet t=new TreeSet(new Mycompare1()); //按照年龄 TreeSet t=new TreeSet(new Mycompare2()); //按照分数 t.add(new Person("xxc1",15,99)); t.add(new Person("xxc2",20,98)); t.add(new Person("xxc6",17,108)); t.add(new Person("xxc3",16,77)); t.add(new Person("xxc5",10,230)); Iterator t1=t.iterator(); while (t1.hasNext()) { Person p=(Person)t1.next(); System.out.println(p.getName()+"======"+p.getAge()+"======"+p.getScore()); } } } class Mycompare1 implements Comparator { public int compare(Object o1,Object o2) { Person p=(Person)o1; Person p1=(Person)o2; //int num=p.getAge().compareTo(p1.getAge()); int num = p.getAge() -p1.getAge(); if (num==0) { return new Integer (p.getAge()).compareTo(new Integer(p1.getAge())); } return num; } } class Mycompare implements Comparator { public int compare(Object o1,Object o2) { Person p=(Person)o1; Person p1=(Person)o2; int num=p.getName().compareTo(p1.getName()); if (num==0) { return new Integer (p.getAge()).compareTo(new Integer(p1.getAge())); } return num; } } class Mycompare2 implements Comparator { public int compare(Object o1,Object o2) { Person p=(Person)o1; Person p1=(Person)o2; //int num=p.getAge().compareTo(p1.getAge()); int num = p.getScore() -p1.getScore(); if (num==0) { return new Integer (p.getAge()).compareTo(new Integer(p1.getAge())); } return num; } }
运行效果如下:
TreeSet的第一种排序方式是实现Comparable接口覆写compareTo方法,此排序是自然顺序排序。
TreeSet的第二种排序方式是实现Comparator接口覆写compare方法,此排序是在集合一初始化就拥有的,所以要讲此接口的实例对象传入到TreeSet的构造函数中。
2. TreeSet总结
1). TreeSet的特点
(1). 可以对元素进行排序
有两种排序方式。
(2). TreeSet保证元素的唯一性依据
在实现的Comparable的compareTo或者Comparator的compare方法中,如果这两个方法的返回值为0,那么TreeSet就认为这两个元素一样。按照Set的唯一性规则,在一次重复的元素不能被添加到TreeSet这个集合中。
2). TreeSet的两种排序方式
(1). 让元素本身具有比较性
元素本身要实现Comparable接口并实现里面的compareTo方法以保证元素本身具有比较性
(2). 让容器自身具有比较性
当元素本身不具有比较性或者具备的比较性不是所需要的,就在TreeSet建立实例的时候,传入Comparator接口的实现子类的实例。这个Comparator子类必须实现compare方法。
(3). 元素的可存储性
[1]. 自定义的类,如果重写了hashCode和equals两个方法,可以存入HashSet容器
[2]. 自定义的类,如果实现了Comparable的compareTo()方法,可以存入TreeSet容器。
【总结】如果自定义的类既重写了hashCode和equals,又实现了compareTo,那么这个类的元素既可以存入HashSet容器,也可以存入TreeSet容器。
相关文章推荐
- TreeSet存储自定义对象并遍历练习1(按照姓名排序)
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
- TreeSet存储自定义对象并遍历练习2(按照姓名的长度排序)
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
- Java 往TreeSet集合中存储自定义对象学生,按照学生的年龄进行排序。
- TreeMap的使用,实现按照特定方式排序,并且使用Iterator遍历
- TreeSet存储自定义对象并保证排序和唯一
- 利用TreeSet,按照姓名长度的大小决定存储的顺序,从长到短排序,如果长度一样,年龄小的在前面,源码
- 往TreeSet中存入自定义对象,并且使用自定义排序方法(实现comparetor)
- TreeSet存储自定义对象,并对对象排序的两种方式
- TreeSet排序,存储自定义对象,自定义比较器示例
- TreeSet集合存放自定义类型的对象,可以使用比较器,实现Comparable接口自己设置排序方式
- 用TreeSet存储自定义对象1(实现Comparable接口)
- 在TreeSet中实现存储自定义对象
- python字典实现按照自定义顺序排序
- 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能
- 扩展DataGrid控件,能够实现多列排序,自定义标题,动态增加表头等
- mysql 按照特定顺序排序
- 如何实现自定义类对象数组的排序
- 如何自定义一个Remoting中Sink对象实现特定协议上的消息转发