集合-TreeMap详解和TreeSet详解以及两者的区别

本文详细介绍了Java集合中的TreeMap和TreeSet。TreeMap基于红黑树,非线程安全,支持自定义排序。而TreeSet是TreeMap的封装,键值不可重复,同样支持排序。它们在实现方式、用途和排序上有显著区别,TreeMap更适合快速插入和查找,而TreeSet常用于去重和排序。
摘要由CSDN通过智能技术生成
TreeMap底层数据结构:TreeMap底层数据结构是红黑树;
红黑树特性:
  1. 每个节点都只能是红色或者黑色;
  2. 根节点是黑色;
  3. 每个叶节点(NLL节点,空节点)是黑色的;
  4. 如果一个节点是红色的,那么它的两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色节点;
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点;
特点:
  • TreeMap是非线程安全的 :但是可以用如下如下方式设置为线程安全:
   Map m=Collections.synchronizedSortedMap(new TreeMap()); 来实现线程安全;
  • TreeMap是用键进行排序的,默认采用升序排序;通过Comparable或Comparator来排序;
    TreeMap是SortedMap接口基于红黑树的实现。此类保证了映射按照升序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序进行排序,或者按照创建时所提供的比较器(自定义)进行排序;

  • 允许值重复,不允许键重复;

  • 键不可以为null(如果比较器对null做了处理,就可以为null),值可以为null;

TreeMap的应用:
  • 自定义排序:
  Map<Integer,Integer> map = new TreeMap<>();
        map.put(1, null);
        map.put(10, 1);
        map.put(3, 2);
        map.put(2, 3);
        
        for(Map.Entry<Integer, Integer> entry:map.entrySet())
        {
   
            System.out.println(entry.getKey()+":"+entry.getValue());
        }

       //输出结果
       // 1:null
       // 2:3
       // 3:2
       // 10:1
  • Comparable 排序:只要自定义类实现了Comparable接口,就可以实现排序;

    public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值