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);
}
}