treeset类
来源:互联网 发布:在淘宝上买书需要什么 编辑:程序博客网 时间:2024/06/07 06:44
今天刚学习了treeset类,这个类是有序的,而且实现使用使用的树
先简单的比较一下几个set类:
Set(interface )
存入set的每个原酸都必须是唯一的, 因为set不保存重复元素,加入set的元素必须定义equals方法以确保对象的唯一性。set与collection有完全一样的接口,set接口不保证维护元素的次序。
Hashset
为了快速查找而设计的set存入hashset的元素必须定义hashcode,如果没有其他限制,这是默认的选择
Treeset
保持次序的set,底层为树结构,使用它可以从set中提取有序的序列。元素必须实现comparable接口
Linkedhashset 具有hashset的查询速度,而内部结构使用链表维护元素顺序,插入的顺序,于是在使用迭代器遍历set时,结果会按照元素的插入顺序显示,元素也必须定义hashcode()方法。
自然排序
对于自然排序,在执行add
方法的时候,treeset
会调用compareTo
方法,所以被添加的实体类必须实现comparable
接口。
然后实现compareto
方法,在定义中返回值为int,如果调用者大于被调用者返回1,反之返回-1,相等为0,所以如果返回为0则插入重复数据。倘若想要实现自然排序,就将泛型写为要排序的类:
例子如下:
public class Yuangong implements Comparable<Yuangong>{}//实现接口
public int compareTo(Yuangong o) { // TODO Auto-generated method stub if(this.getAge()!=o.getAge()) if(this.getAge()>o.getAge()) return 1; if(this.getAge()<o.getAge()) return -1; //age按照升序排列 else if(this.getGongling()!=o.getGongling()) if(this.getGongling()>o.getGongling()) return -1; if(this.getGongling()<o.getGongling()) return 1; //如果年龄相同,工龄按照降序排列 else if(this.getXinshui()!=o.getXinshui()) if(this.getXinshui()>o.getXinshui()) return -1; if(this.getXinshui()<o.getXinshui()) return 1; //如果依旧相同,将按照工资降序排列 return 0;//全部相同,返回0 }
在主函数中:
Yuangong y5=new Yuangong(13, 10, 2344); Yuangong y1=new Yuangong(10, 10, 1000); Yuangong y4=new Yuangong(13, 10, 1230); Yuangong y2=new Yuangong(10, 11, 1000); Yuangong y3=new Yuangong(13, 11, 1000); TreeSet<Yuangong> t4=new TreeSet<Yuangong>(); t4.add(y1); t4.add(y2); t4.add(y3); t4.add(y4); t4.add(y5); System.out.println(t4);
定义5个员工,然后add进入treeset中,输入出来就是已经排序好的。
定义排序
另外就是定义排序
也就是定义一个类,实现comparator接口,这就是一个比较器,然后在类中,重写方法compare()
在创建treeset对象时,通过调用构造方法:
TreeSet(Comparator<? super E> comparator) //构造一个新的空 TreeSet,它根据指定比较器进行排序。
然后添加数据。
实现如下:
public class paixu implements Comparator<Yuangong>{}
然后实现方法
@Override public int compare(Yuangong o1, Yuangong o2) { if(o1.getAge()!=o2.getAge()) if(o1.getAge()>o2.getAge()) return 1; if(o1.getAge()<o2.getAge()) return -1; else if(o1.getGongling()!=o2.getGongling()) if(o1.getGongling()>o2.getGongling()) return -1; if(o1.getGongling()<o2.getGongling()) return 1; else if(o1.getXinshui()!=o2.getXinshui()) if(o1.getXinshui()>o2.getXinshui()) return -1; if(o1.getXinshui()<o2.getXinshui()) return 1; return 0; }
基本实现差不多,不过比较器是单独出来的一个类,在使用上会比上面的方便很多。
然后主函数的初始化也需要改变如下
TreeSet<Yuangong> t4=new TreeSet<Yuangong>(new paixu());
也就是调用了上面的有参构造方法,new出了一个比较器。
- TreeSet类
- TreeSet类
- TreeSet类
- TreeSet类
- treeset类
- 类 TreeSet<E> 遍历 TreeSet<String> 和TreeSet<Person>
- 【集合】TreeSet类
- Java TreeSet类
- JAVA 集合类 TREESET
- TREEset的模板类
- TreeSet类源码解析
- 集合类2-TreeSet
- TreeSet类的排序
- TreeSet类练习
- TreeSet
- TreeSet
- TreeSet
- TreeSet
- Boost库入门
- 8月7日总结
- 高德地图基本开发流程
- apache camel不同主机上转发数据
- 正则表达式
- treeset类
- jedis与redis
- java基础之DateFormat类
- Linux下设置开机自启动Tomcat
- java中==和equals的区别
- SDUT-数据结构实验之排序五:归并求逆序数
- Java——StringBuffer,String总结
- Codeforces Gym
- 笔试题6——数组中2个出现一次的数(其他2次)