TreeSet学习小结
来源:互联网 发布:软件外包群 编辑:程序博客网 时间:2024/06/04 18:23
JDK对TreeSet介绍如下:
基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
TreeSet的特点是可以对元素按照某种规则进行排序,并且保证元素的唯一性。
排序的方式有两种:
A:自然排序
B:比较器排序
例如:
public class TreeSetDemo { public static void main(String[] args) { // 创建集合对象 // 自然顺序进行排序 TreeSet<Integer> ts = new TreeSet<Integer>(); // 创建元素并添加 // 20,18,23,22,17,24,19,18,24 ts.add(20); ts.add(18); ts.add(23); ts.add(22); ts.add(17); ts.add(24); ts.add(19); ts.add(18); ts.add(24); // 遍历 for (Integer i : ts) { System.out.print(i + " "); } }}
在上述代码中,插入的数值是无序的,并且有重复。运行结果如下:
17 18 19 20 22 23 24
最终在TreeSet中元素变成了有序且唯一的了。将Integer换成String类型数据之后,运行结果也是类似的。
由于TreeSet是基于TreeMap实现的,而TreeMap的实现就是红黑树数据结构,因此TreeSet的结构也是红黑树。在执行add操作的时候,会对元素进行比较,然后根据比较的结果决定元素存放的节点位置。
Integer和String都实现了Comparable接口,因此可以直接使用TreeSet进行操作。但是对于自定义的类,是没有实现Comparable接口的,因此要想使用TreeSet,就必须通过上文提到的两种方式:自然排序和比较器排序。
自然排序:让元素所属的类实现自然排序接口 Comparable。
比较器排序:让集合的构造方法接收一个比较器接口的子类对象 Comparator。
例如对Student学生类使用TreeSet,两种方法
1、自然排序
public class Student implements Comparable<Student> { private String sno; private String name; private int age; public Student() { super(); } public Student(String sno, String name, int age) { super(); this.sno = sno; this.name = name; this.age = age; } public String getSno(){ return sno; } public void setSno(String sno){ this.sno = sno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student s) { //自定义排序标准,这里按照sno排序 return this.sno.compareTo(s.sno); }}
2、比较器排序
//创建集合时在构造方法中传入Comparator的子类对象TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { return this.sno.compareTo(s.sno); } });
0 0
- TreeSet学习小结
- 由TreeSet引出的Comparable和Comparator学习小结
- TreeSet学习
- java TreeSet 学习
- 学习日记java TreeSet
- JavaSE 学习参考:TreeSet
- Java学习之TreeSet
- java中TreeSet学习
- API学习TreeSet
- java日常学习:TreeSet
- java HashSet / TreeSet 学习
- 集合类的学习--TreeSet
- JAVAAPI学习值TreeSet类
- Java 集合学习<2>TreeSet
- TreeSet的学习和使用
- TreeSet学习的个人记录
- TreeSet
- TreeSet
- nginx的location匹配规则----nginx的学习之路
- CentOS主机NAT网络访问虚拟机web服务器
- 删除二叉查找树的节点-LintCode
- java集合框架小结
- arm寄存器介绍
- TreeSet学习小结
- Windows API函数大全
- IE附图(Image对象)显示内存溢出解决方案
- 安卓ADT离线安装教程
- 富文本Html.fromHtml方法
- 常见问题总结篇 一 、Objective C 方法和 C方法的混合调用
- Merge k Sorted Lists
- static用途
- Problem 10:Regular Expression Matching