treeset的实现原理

来源:互联网 发布:学编程需要会什么数学 编辑:程序博客网 时间:2024/04/29 05:36

1.特点
TreeSet是用来排序的,可以指定一个顺序,对象存入后会按照指定的顺序排列
2.使用方式
a.自然顺序
*TreeSet类的add()方法会把存入的对象提升为
Comparable类型
*调用对象的compareTo()方法和集合中的对象
比较,当前存入的是谁就会调用compareTo的
方法
*根据compateTo()方法返回的结果进行存储
b.比较器排序
*创建TreeSet的时候可以指定一个Comparator
*如果传入了Compare的子对象,那么TreeSet
会按照比较器中的顺序排序
*add()方法内部会自动调用Comparator接口中
的compare()方法排序
*调用的对象就是当前存入的对象是compare方
法中的第一个参数,集合的对象已经添加进去
的对象就是compare的第二个对象
c.2中方式的比较
* TreeSet构造函数什么不传,默认按照
Comparable的顺序,没有就报
classCastException
*TreeSet如果传入Comparator,就优先按照
Comparator

package com.itheima;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.TreeSet;/** * TreeSet排序原理 *  * @author gaojiangjian * */public class Text16 {    public static void main(String[] args) {         ArrayList<String> list = new ArrayList<String>();         list.add("aaa");         list.add("aaa");         list.add("ccc");         list.add("ddd");         list.add("fffffffffff");         list.add("heima");         list.add("itcast");         list.add("bbbb");         list.add("aaa");         list.add("aaa");         //2,定义方法对其排序保留重复         sort(list);         //3,打印list         System.out.println(list);    }    public static void sort(List<String> list) {        TreeSet<String> treeSet = new TreeSet<String>(new Comparator<String>() {            @Override            public int compare(String o1, String o2) {                // TODO Auto-generated method stub                int num = o1.compareTo(o2);                return num == 0 ? 1 : num;            }        });        treeSet.addAll(list);        list.clear();        list.addAll(treeSet);    }}
0 0