TreeSet和TreeMap实现排序
2016-04-17 14:25
302 查看
TreeSet
TreeSet类是Set接口的一个实现类,确保元素实体可以排序,不同于HashSet(也是Set接口的实现类),TreeSet不需要重写hashcode和equals方法。
TreeSet的构造方法有以下几种
那么就可以有两种排序方式
1. java.lang.Comparble+compareTo
new TreeSet()
用这种方法必须要求实体类实现Comparable接口,也就是说要求添加到TreeSet中的元素是可排序的
2. java.util.Comparator +compare
new TreeSet(Comparator
输出结果为:
[Person [name=jack, handsome=50], Person [name=tom, handsome=90], Person [name=depp, handsome=100] ]
[Person [name=jack, handsome=120], Person [name=tom, handsome=90], Person [name=depp, handsome=100] ]
排序结果没有改变,是因为TreeSet在添加元素的时候进行排序,需要注意,数据更改不会影响原来的顺序
还有一点需要注意的是,TreeSet中不可以数据重复,所以一般不修改数据,为了确保这一点,我们可以在Person类为属性加上final关键字,删除setter方法,如下
TreeMap
TreeMap实现了Map接口,同样要求元素可以排序,同上TreeSet
利用上面定义的Person类,TreeMapDemo测试,见代码
输出结果为:(注意:换行格式手动调整过)
{Person [name=jack, handsome=50]=www,
Person [name=tom, handsome=90]=www,
Person [name=depp,handsome=100]=www}
[Person [name=jack, handsome=50], Person [name=tom, handsome=90], Person [name=depp, handsome=100] ]
与TreeSet一样,TreeMap也是在添加元素时进行排序
TreeSet类是Set接口的一个实现类,确保元素实体可以排序,不同于HashSet(也是Set接口的实现类),TreeSet不需要重写hashcode和equals方法。
TreeSet的构造方法有以下几种
那么就可以有两种排序方式
1. java.lang.Comparble+compareTo
new TreeSet()
用这种方法必须要求实体类实现Comparable接口,也就是说要求添加到TreeSet中的元素是可排序的
2. java.util.Comparator +compare
new TreeSet(Comparator
//person实体类 public class Person { private String name; private int handsome; public Person() { // TODO Auto-generated constructor stub } public Person(String name, int handsome) { super(); this.name = name; this.handsome = handsome; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getHandsome() { return handsome; } public void setHandsome(int handsome) { this.handsome = handsome; } @Override public String toString() { return "Person [name=" + name + ", handsome=" + handsome + "]\n"; } }
import java.util.Comparator; import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] args) { Person p1=new Person("depp",100); Person p2=new Person("tom",90); Person p3=new Person("jack",50); TreeSet<Person> ts=new TreeSet<Person>(new Comparator<Person>(){ public int compare(Person o1, Person o2) { return o1.getHandsome()-o2.getHandsome();//升序 } }); //TreeSet在添加数据时排序,而Collections的sort方法是在元素添加完成以后排序 ts.add(p1); ts.add(p2); ts.add(p3); System.out.println(ts); //改变数据,排序不会改变 p3.setHandsome(120); System.out.println(ts); } }
输出结果为:
[Person [name=jack, handsome=50], Person [name=tom, handsome=90], Person [name=depp, handsome=100] ]
[Person [name=jack, handsome=120], Person [name=tom, handsome=90], Person [name=depp, handsome=100] ]
排序结果没有改变,是因为TreeSet在添加元素的时候进行排序,需要注意,数据更改不会影响原来的顺序
还有一点需要注意的是,TreeSet中不可以数据重复,所以一般不修改数据,为了确保这一点,我们可以在Person类为属性加上final关键字,删除setter方法,如下
private final String name; private final int handsome; public Person() { name=null; handsome=0; }
TreeMap
TreeMap实现了Map接口,同样要求元素可以排序,同上TreeSet
利用上面定义的Person类,TreeMapDemo测试,见代码
TreeMap<Person,String> tm=new TreeMap<Person,String>(new Comparator<Person>(){ public int compare(Person o1, Person o2) { return o1.getHandsome()-o2.getHandsome();//升序 } }); tm.put(p1,"www"); tm.put(p2,"www"); tm.put(p3,"www"); System.out.println(tm); //也可以用set进行输出 Set<Person> set=tm.keySet(); System.out.println(set);
输出结果为:(注意:换行格式手动调整过)
{Person [name=jack, handsome=50]=www,
Person [name=tom, handsome=90]=www,
Person [name=depp,handsome=100]=www}
[Person [name=jack, handsome=50], Person [name=tom, handsome=90], Person [name=depp, handsome=100] ]
与TreeSet一样,TreeMap也是在添加元素时进行排序
相关文章推荐
- Android学习笔记(Day10多媒体)
- 《机电传动控制》学习笔记08-2-PLC梯形图编程练习
- 如何判断单链表有环,并找出环的入口
- POJ2796 Feel Good(单调栈)
- FastJson循环引用问题
- 20145303 《Java程序设计》第7周学习总结
- 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
- [置顶] WebService学习总结(1)——WebService相关概念
- [置顶] WebService学习总结(1)——WebService相关概念
- CocoaPods 具体 使用教程及经验总结
- poj 2559 Largest Rectangle in a Histogram
- WebService学习总结(1)——WebService相关概念
- 集成tiles3时遇到的问题,mark一下
- Hadoop学习笔记(4)-Eclipse下搭建Hadoop2.6.4开发环境
- Oracle-SQL01
- mysql explain执行计划详解
- Jquery学习之旅之chaining
- bzoj 2937: [Poi2000]建造酿酒厂
- procfs、debugfs
- 《机电传动控制》学习笔记08-1