TreeSet
注意事项:
1、往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么久按照元素的自然顺序特性进行排序。
2、往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,吧元素的比较规则定义在compareTo()方法上。
3、如果比较元素的时候,compareTo方法的返回值是0,那么改元素就被视为重复元素,不允许添加。
4、往TreeSet添加元素的时候,如果元素本身不具备自然顺序属性,并且元素所属的类也没有实现comparable接口,那么必须要在创建TreeSet对象的时候传入一个比较器。(如何创建比较器?)
底层实现:红黑树(二叉树)的数据结构。 规则:左小右大。
二叉树如果连续三个节点没有形成二叉树,则就会自动调整节点。
2、不具备自然排序属性,改元素所属的类必须实现comparable接口:例子:
package cd.itcast.runble; import java.util.TreeSet; /** * TreeSet自定义对象按某属性排序(实现Comparable接口) * @author 甘兴瑞 *2016/11/9 */ class Emp implements Comparable{ int id; String name; int salary; public Emp(int id, String name, int salary) { this.id = id; this.name = name; this.salary = salary; } @Override public int compareTo(Object o) { Emp emp = (Emp)o; //按薪水排序 return this.salary-emp.salary; } @Override public String toString() { return "{工号:"+this.id+",姓名:"+this.name+",薪水"+this.salary+"}"; } } public class Demo4 { public static void main(String[] args) { TreeSet treeSet = new TreeSet(); treeSet.add(new Emp(110, "张三", 5000)); treeSet.add(new Emp(113, "李四", 6000)); treeSet.add(new Emp(115, "王五", 4000)); treeSet.add(new Emp(119, "老六", 5500)); System.out.println(treeSet);
//[{工号:115,姓名:王五,薪水4000}, {工号:110,姓名:张三,薪水5000}, {工号:119,姓名:老六,薪水5500}, {工号:113,姓名:李四,薪水6000}] } }
3、定义比较器,实现。例子:
package cd.itcast.runble; import java.util.Comparator; import java.util.TreeSet; /** * TreeSet自定义对象按某属性排序(实现Comparable接口) * @author 甘兴瑞 *2016/11/9 */ class Emp { int id; String name; int salary; public Emp(int id, String name, int salary) { this.id = id; this.name = name; this.salary = salary; } // @Override // public int compareTo(Object o) { // Emp emp = (Emp)o; // //按薪水排序 // return this.salary-emp.salary; // } @Override public String toString() { return "{工号:"+this.id+",姓名:"+this.name+",薪水"+this.salary+"}"; } }
//自定义比较器,在创建treeset的时候传入; class MyCompare implements Comparator{ @Override public int compare(Object o1, Object o2) { Emp e1 = (Emp)o1; Emp e2 = (Emp)o2; return e1.salary-e2.salary; } } public class Demo4 { public static void main(String[] args) { MyCompare myCompare = new MyCompare(); TreeSet treeSet = new TreeSet(myCompare); treeSet.add(new Emp(110, "张三", 5000)); treeSet.add(new Emp(113, "李四", 6000)); treeSet.add(new Emp(115, "王五", 4000)); treeSet.add(new Emp(119, "老六", 5500)); System.out.println(treeSet); } }