前辈好!知道TreeSet底层数据结果是二叉树。当向集合添加元素时,会调用compareTo方法和前面的元素进行比较。写了一段程序,是毕老师讲课的那个程序。可是运行结果发现,后面添加的元素并未和前面添加进来的所有元素都比较,这是为什么?代码如下:
- /*--TreeSet:可以对Set集合中的元素进行排序。
- 底层数据结构是二叉树。
- 保证元素唯一性的依据:
- compareTo方法return 0.
- TreeSet排序的第一种方式:让元素自身具备比较性。
- 元素需要实现Comparable接口,覆盖compareTo方法。
- 也种方式也成为元素的自然顺序,或者叫做默认顺序。
- TreeSet的第二种排序方式。
- 当元素自身不具备比较性时,或者具备的比较性不是所需要的。
- 这时就需要让集合自身具备比较性。
- 在集合初始化时,就有了比较方式。
- 需求:
- 往TreeSet集合中存储自定义对象学生。
- 想按照学生的年龄进行排序。
- 记住,排序时,当主要条件相同时,一定判断一下次要条件。*/
- import java.util.*;
- class TreeSetDemo
- {
- public static void main(String[] args)
- {
- TreeSet ts = new TreeSet();
- ts.add(new Student("lisi02",22));
- ts.add(new Student("lisi007",20));
- ts.add(new Student("lisi09",19));
- ts.add(new Student("lisi08",19));
- ts.add(new Student("lisi007",20));
- Iterator it = ts.iterator();
- while(it.hasNext())
- {
- Student stu = (Student)it.next();
- System.out.println(stu.getName()+"..."+stu.getAge());
- }
-
- }
-
- }
- 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;
- }
-
-
- public int compareTo(Object obj)
- {
- if(!(obj instanceof Student))
- {
- throw new RuntimeException("该对象不是学生类型");
- }
- Student s = (Student)obj;
- System.out.println(this.name+"使用compareTo方法比较了"+s.name);
- int num = this.age-s.age;
- if(!(num==0))
- {
- return num;
- }
- else
- {
- return this.getName().compareTo(s.getName());
- }
- }
- }
- /*
- G:\代码\集合框架>java TreeSetDemo
- lisi02使用compareTo方法比较了lisi02
- lisi007使用compareTo方法比较了lisi02
- lisi09使用compareTo方法比较了lisi02
- lisi09使用compareTo方法比较了lisi007
- lisi08使用compareTo方法比较了lisi007
- lisi08使用compareTo方法比较了lisi09
- lisi007使用compareTo方法比较了lisi007
- lisi08...19
- lisi09...19
- lisi007...20
- lisi02...22
- */
复制代码 |
|