三、TreeSet 1、特点 a、底层的数据结构为二叉树结构(红黑树结构) b)可对Set集合中的元素进行排序,是因为:TreeSet类实现了Comparable接口,该接口强制让增加到集合中的对象进行了比较,需要复写compareTo方法,才能让对象按指定需求(如人的年龄大小比较等)进行排序,并加入集合。 java中的很多类都具备比较性,其实就是实现了Comparable接口。 注意:排序时,当主要条件相同时,按次要条件排序。 二叉树示意图 c、保证数据的唯一性的依据:通过compareTo方法的返回值,是正整数、负整数或零,则两个对象较大、较小或相同。相等时则不会存入。 2、Tree排序的两种方式 1)第一种排序方式:自然排序 让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式也被称为元素的自然顺序,或者叫做默认顺序。 示例: [java] view plaincopy
- import java.util.*;
- //学生类
- class Student implements Comparable
- {
- private String name;
- private int age;
- Student(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- public String getName()
- {
- return name;
- }
-
- public int getAge()
- {
- return age;
- }
- //复写hashCode以便HashSet集合调用
- public int hashCode()
- {
- return name.hashCode()+age;
- }
- //复写equals以便HashSet集合和集合中一些比较方法调用
- public boolean equals(Object obj)
- {
- if(!(obj instanceof Student))
- throw new RuntimeException();
- Student s = (Student)obj;
- return this.name.equals(s.name)&&this.age==s.age;
- }
- //复写compareTo以便TreeSet集合调用
- public int compareTo(Object obj)
- {
- Student s=(Student)obj;
- if(this.age==s.age)
- return this.name.compareTo(s.name);
- return this.age-s.age;
- //return new Integer(this.age).compareTo(new Integer(s.age));
- }
- }
-
- class TreeSetTest
- {
- public static void main(String[] args)
- {
- TreeSet<Student> t=new TreeSet<Student>();
- t.add(new Student("wo1",12));
- t.add(new Student("wosj",2));
- t.add(new Student("wo1sdj",12));
- t.add(new Student("wo6sd",12));
- t.add(new Student("wo",22));
-
-
- for (Iterator<Student> it=t.iterator(); it.hasNext(); )
- {
- Student s=it.next();
- System.out.println(s.getName()+"....."+s.getAge());
- }
- }
- }
|