关于java中TreeSet类的一些问题

Python014

关于java中TreeSet类的一些问题,第1张

范型E是TreeSet的类型参数,比较器的类型参数应该是TreeSet类型参数的父类

Person是比较器的类型参数,Worker是TreeSet的类型参数,Person是Worker的父类,所以没毛病

treeset实现了sortedset接口,也就是重写了里面的方法,但具体实现的方式由实现的子类自己编写,所以treeset在实现set集合采用的算法是树型算法。

TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。Treeset算法:

构造一个新的空TreeSet,它根据指定比较器进行排序。插入到该 set 的所有元素都必须能够由指定比较器进行相互比较:对于 set 中的任意两个元素 e1 和e2,执行 comparator.compare(e1, e2) 都不得抛出 ClassCastException。如果用户试图将违反此约束的元素添加到 set 中,则 add 调用将抛出 ClassCastException。

package test.treeset

import java.util.Comparator

import java.util.Iterator

import java.util.TreeSet

public class TreeSetTest {

    @SuppressWarnings("unchecked")

    public static void main(String[] args) {

        TreeSet ts = new TreeSet(new Teacher2.TeacherCompare())

        ts.add(new Teacher2("zhangsan", 2))

        ts.add(new Teacher2("lisi", 1))

        ts.add(new Teacher2("wangmazi", 3))

        ts.add(new Teacher2("mazi", 3))

        Iterator it = ts.iterator()

        while (it.hasNext()) {

            System.out.println(it.next())

        }

    }

}

class Teacher2 {

    int num

    String name

    Teacher2(String name, int num) {

        this.num = num

        this.name = name

    }

    public String toString() {

        return "学号:" + num + "    姓名:" + name

    }

    static class TeacherCompare implements Comparator {// 老师自带的一个比较器

        //o1中存放的事目标节点

        //o2中存放时的红黑二叉树中的节点,从根节点开始比较

        public int compare(Object o1, Object o2) {

            Teacher2 s1 = (Teacher2) o1// 转型

            Teacher2 s2 = (Teacher2) o2// 转型

            int result = s1.num > s2.num ? 1 : (s1.num == s2.num ? 0 : -1)

            if (result == 0) {

                result = s1.name.compareTo(s2.name)

            }

            return result

        }

    }

}

TreeSet是一个有序集合,其元素按照升序排列。

默认是按照自然顺序排列,也就是说TreeSet中的对象元素需要实现Comparable接口。