Java学习之TreeSet的使用
2021/8/6 9:06:14
本文主要是介绍Java学习之TreeSet的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java学习之TreeSet的使用
基础知识
-
TreeSet内部采用平衡二叉树存储元素,这样的结构保证集合中没有重复的元素并且可以对元素进行排序
-
对于元素的排序,则必须实现Comparable接口的CompareTo()方法,Java中的大部分的类都实现了Comparable接口,并默认实现了CompareTo()方法
-
使用TreeSet集合存储数据时,TreeSet会对存入元素进行比较排序,所以为了保证程序正常运行,一定要保证存入的元素是同一种数据类型
-
在实际开发中,除了向TreeSet集合中存储一些Java默认的类型数据以外,还会存储一些用户自定义的数据类型,这些自定义数据类型吗没有实现Comparable接口,因此无法直接在TreeSet集合中进行排序
-
为了解决上述问题,Java提供了两种TreeSet的排序规则
- 自然排序:向TreeSet集合中存储元素的所在类实现Comparable接口并且实现CompareTo方法
package com.tang.chapter6.collection; import java.util.TreeSet; /** * @author Tang */ public class Teacher implements Comparable { int id; String name; public Teacher(){}; public Teacher(int id,String name){ this.id = id; this.name = name; } @Override public String toString(){ return id + ":" + name; } @Override public int compareTo(Object o) { Teacher tc = (Teacher) o; if (this.id > tc.id){ return 1; } if (this.id == tc.id){ return this.name.compareTo(tc.name); } return -1; } /** * 在代码中,首先实现了Comparable接口,其次实现了接口中的CompareTo()方法 * 在CompareTo()方法中,首先针对id值进行比较,大于返回1,相等继续比较name的值,小于则返回-1 * 比较的规则是现根据id值进行升序排,然后根据name值的字典序排,同时去除重复的元素 */ public static void main(String[] args) { TreeSet<String> treeSet = new TreeSet<String>(); Teacher tc1 = new Teacher(11,"zs"); Teacher tc2 = new Teacher(11,"ls"); Teacher tc3 = new Teacher(12,"ls"); Teacher tc4 = new Teacher(13,"ww"); Teacher tc5 = new Teacher(11,"zs"); treeSet.add(tc1.toString()); treeSet.add(tc2.toString()); treeSet.add(tc3.toString()); treeSet.add(tc4.toString()); treeSet.add(tc5.toString()); System.out.println(treeSet); } }
- 定制排序:自定义一个比较器进行排序
package com.tang.chapter6.collection; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.TreeSet; /** * @author Tang */ class MyCompareTor implements Comparator{ @Override public int compare(Object obj1, Object obj2){ String s1 = (String)obj1; String s2 = (String)obj2; return s1.length() - s2.length(); } } public class Demo05 { public static void main(String[] args) { TreeSet<String> ts = new TreeSet<String>(); ts.add("aaa"); ts.add("ccc"); ts.add("ddd"); ts.add("bbb"); System.out.println(ts); } }
Demo案例
package com.tang.chapter6.collection; import java.util.TreeSet; /** * @author Tang */ public class Teacher { public static void main(String[] args) { TreeSet<Integer> treeSet = new TreeSet<Integer>(); treeSet.add(9); treeSet.add(2); treeSet.add(78); treeSet.add(6); System.out.println(treeSet); System.out.println(treeSet.size()); System.out.println(treeSet.first()); System.out.println(treeSet.last()); Object obj = treeSet.pollFirst(); System.out.println(obj); System.out.println(treeSet); } }
这篇关于Java学习之TreeSet的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能
- 2024-11-28如何高效管理数字化转型项目
- 2024-11-28SMART法则好用吗?有哪些项目管理工具辅助实现?
- 2024-11-28深度剖析:6 款办公软件如何构建设计团队项目可视化管理新生态?
- 2024-11-28HTTP缓存课程:新手入门指南
- 2024-11-28实战丨证券 HTAP 混合业务场景的难点问题应对