TreeMap和LinkedHashMap

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

TreeMap

总体特点:(主要是跟linkedHashMap比较)

  1. 底层是基于红黑树实现,是个有序集合,按照key的compareTo方法或在构造时传入的Comparator比较器进行排序。这里需要注意如果在构造 时没有传入Comparator,那么key必须实现Comparable接口,不然会报错

  2. TreeMap是通过Comparator比较器来构建红黑树从而保证key的有序性,而LinkedHashMap是通过双向链表来保证元素插入的有序性,两者有序性的含义不是一样的

  3. TreeMap继承于AbstractMap,linkedHashMap继承于HashMap.TreeMap里面只维护红黑树这个数据结构,而LinkedHashMap是数组+单向链表+双向链表结构。TreeMap的所有增删改查的操作都是对红黑树的操作,而LinkedHashMap的增删改查操作是先对数组的操作,再对双向链表的操作,遍历的时候是遍历的双向链表

  4. TreeMap主要用在需要排序的场景(还可以实现一致性hash算法),LinkedHashMap主要用在需要加密、签名、jvm缓存场景

    LinkedHashMap

总体特点:

  1. 继承于HashMap,主要一些集合操作方法使用的都是父类HashMap中的方法,然后在创建节点时覆盖了newNode(int hash, K key, V value, Node<K,V> e)方法,在此方法进行维护双向链表。他的数据结构类似于下面这样

  1. linkedHashMap内部是一个双向链表,是一个有序集合,他的有序主要是维护元素的插入顺序。主要实现了HashMap中的afterNodeAccess、afterNodeInsertion、afterNodeRemoval方法,afterNodeAccess在集合元素被访问(如put,get时)做一些操作,afterNodeInsertion在新元素插入时做一些操作,afterNodeRemoval在元素被删除时做一些操作,这些方法在LinkedHashMap都会对其维护的链表做相应的处理

  2. LinkedHashMap中有一个很重要的变量是accessOrder,默认是false,意思是当LinkedHashMap元素被访问时需不需要调整元素的顺序,默认是不需要调整,如果是true则是需要调整,然后会把每次访问的元素调整到链表的尾部

实战经验及使用场景:

  1. LinkedHashMap很适合是使用在需要签名或加密的场景,因为他能保证插入元素的顺序性

  2. LinkedHashMap也很适合做jvm本地缓存,本地缓存需要考虑是线程安全性和防止内存泄漏。而LinkedHashMap可以完美的实现类似于LRU缓存算法,至于LRU算法是个什么算法这里不详细说了,最经典的就是dubbo中的工具类:org.apache.dubbo.common.utils.LRUCache。LinkedHashMap的链表中越接近head部分是最老最不常用的数据,越接近tail部分是最新最常用的数据,所以在元素需要淘汰时从head开始淘汰.在实现过程中主要通过accessOrder变量和removeEldestEntry(Map.Entry<K,V> eldest)方法来实现,默认都是false。需要实现LRU算法时都需要设置成true

公众号同名,欢迎关注 

TreeMap使用场景 优势 TreeMap使用场景 1- 简介 TreeMap的底层实现原理 基于红黑树实现的排序Map TreeMap增删改查的时间复杂度 TreeMap的增删改查统计相关的操作的时间复杂度都为O(logn) TreeMap的keyvalue的要求 1 由于实现了Map接口,则key的值不允许重复(重复则覆盖),也不允许为... 阅读详情

相关推荐

054_TreeMap / LinkedHashMap

TreeMapLinkedHashMapJava中Map接口的两种重要实现,分别提供排序顺序保留功能。TreeMap基于红黑树实现,按键排序(自然或定制),增删改查时间复杂度为O(log n),适用于需要排序或导航操作的场景。LinkedHashMap基于哈希表+双向链表,保留插入或访问顺序,查询性能O(1),适用于需要记录顺序或实现LRU缓存的场景。两者均非线程安全,允许null值但TreeMap不允许null键。开发者应根据排序需求或顺序保留需求选择合适的实现。

2504_90185953的博客 1363

开发中复杂Json解析(LinkedTreeMap

开发中遇到的复杂JSON,用TypeToken来进行处理:(当然还有第二种解析方式,请查看http://blog.csdn.net/jason_996/article/details/78039799) 处理方法: 1,先将接口返回的JSON,用gson.tojson(map)方法,将LinkedTreeMap对象转成String。 2,再通过gson.fromjson(string,type)方法,将String转成LinkedTreeMap。用到了Type type=new TypeToken(){}.getType; 3,再将LinkedTreeMapf进行遍历

HashMap、LinkedHashMapTreeMap对比

LinkedHashMap与HashMap底层存储结构的区别: LinkedHashMap 存储结构 HashMap 相同,依然是数组+链表+红黑树 LinkedHashMap 额外持有一个双向链表,维护插入节点的顺序 最终的数据结构如下图 实际的元素存储与HashMap一致,依然是数组+链表+红黑树的形式 区别在于: 除了维护数组+链表的结构之外,还根据插入Map先后顺序维护了一个双向链表的头尾head,tail Node基本结构,相比较HashMap而言,还增加了 before,

yyy0224的博客 1203

TreeMap 深度解析:底层实现、使用场景并发控制

默认情况下,TreeMap使用元素的自然顺序进行排序。如果元素不实现。

weixin_45701550的博客 1640

数据结构之 LinkedHashMapTreeMap

LinkedHashMapHashMap区别?LinkedHashMap底层实现?利用LinkedHashMap实现LRU缓存?大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的Map.这就是我们的LinkedHashMap,看个小Demo: 可以看到,在使用上,LinkedHashMapHashMap的

m0_49508485的博客 2327

LinKedHashMapTreeMap介绍

文章目录前言一、LinKedHashMap源码分析:继承关系:属性:构造器:私有内部类put 方法:LinKedHashMap总结二、TreeMap源码分析:继承关系:属性:构造器:私有内部类方法:TreeMap总结: 前言 我们对LinKedHashMapTreeMap研究都是基于HashMap为参考来研究一下他们独有的特点,维护这些特点的方法。 提示:以下是本篇文章正文内容,下面案例可供参考 一、LinKedHashMap源码分析: LinKedHashMap继承自HashMap<K,V

liangcheng0213的博客 3056

TreeMap、HashMap LinkedHashMap 的区别

Java 中,`TreeMap`、`HashMap` `LinkedHashMap` 是三种常用的集合类,它们在存储访问数据的方式上有着显著的区别。本文将详细介绍它们之间的差异及各自的特点。

✨ 欢迎来到【Seal ^_^ 的CSDN博客】!✨ 7842

LinkedHashMapTreeMap

在 Map体系中的位置:特点:● 由键决定:有序、不重复、无索引。这里的有序指的是保证存储取出的元素顺序一致原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序,所以有序。

2301_79947226的博客 1539

HashMap、LinkedHashMapTreeMap

HashMap实现了Map接口,并且其底层是基于哈希表(散列表/数组)的数据结构。它使用键(Key)对象的哈希码来确定键值对(Entry)存储的位置。在Java 1.8及以后,当链表长度大于一定阈值(默认是8)时,链表会被转换为红黑树来提高搜索效率。

主要作为个人的笔记用,Not For Everyone。 3122

HashMap、LinkedHashMapTreeMap三者的区别

HashMap、LinkedHashMap TreeMap 都是 Java 集合中用于存储键值对的 Map 接口的实现类,本文重点介绍它们在底层数据结构、元素顺序、性能以及使用场景等方面存在的区别。

weixin_46425661的博客 1992

LinkedHashMaphashMapTreeMap的区别

推荐博客:https://www.jianshu.com/p/8f4f58b4b8ab 区别: LinkedHashMap是继承于HashMap,是基于HashMap双向链表来实现的。 HashMap无序;LinkedHashMap有序,可分为插入顺序访问顺序两种。如果是访问顺序,那putget操作已存在的Entry时,都会把Entry移动到双向链表的表尾(其实是先删除再插入)...

weixin_30242907的博客 151

HashMap 、LinkedHashMap TreeMap

HashMap 、LinkedHashMap TreeMap区别:LinkedHashMap 是继承于HashMap,是基于HashMap双向链表来实现的。HashMap无序;LinkedHashMap有序,可分为插入顺序访问顺序两种。如果是访问顺序,那putget操作已存在的Entry时,会把Entry移动到双向链表的表尾(先删除再插入)。LInkedHashMap是线程不安全的。

Lxcjl的博客 988

JavaTreeMap,HashMapLinkedHashMap的区别

键是有序的,因此如果您需要按排序顺序遍历键,则可以。HashMap、TreeMap LinkedHashMap三个类都实现了java.util.Map接口,并表示从唯一键到值的映射。但是,如果迭代键,则键的顺序基本上是任意的。TreeMap 包含基于键的值。所有类都提供键->值映射遍历键的方法。TreeMap 中第一个插入的条目(键,值)可以包含空键,之后其他键都不能为空,并且可以有多个空值。它与 HashMap 相同,但保持升序(使用其键的自然顺序排序)。HashMap 包含基于键的值。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1205

HashMap,LinkedHashMap,TreeMap的区别

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashM...

ITMAN009的博客 171

老猿说说-TreeMapLinkedHashMap

引导语 在熟悉 HashMap 之后,本小节我们来看下 TreeMap LinkedHashMap,看看 TreeMap 是如何根据 key 进行排序的,LinkedHashMap 是如何用两种策略进行访问的。 1 知识储备 在了解 TreeMap 之前,我们来看下日常工作中排序的两种方式,作为我们学习的基础储备,两种方式的代码如下: public class TreeMapDemo { @Data // DTO 为我们排序的对象 class DTO implements Compara

老猿说说专栏 9162

Map(HashMap、LinkedHashMapTreeMap)双列集合

目录HashMap: 一、核心特性:二、底层实现原理:三、扩容机制:四、常用方法:五、遍历操作:LinkedHashMap:TreeMap:HashMap、LinkedHashMapTreeMap的异同:一、相同点:二、不同点:三、有序性: 是 Java 集合框架中最常用的 键值对(key-value)存储结构,实现了 接口,基于哈希表(数组 + 链表 / 红黑树)实现,具有高效的增删改查操作。(1)存储结构:键值对(key-value),通过 key 快速定位 value。(2)允许 null:可

weixin_62316729的博客 1590

TreeMap LinkedHashMap原理介绍

本文对比分析了Java中的TreeMapLinkedHashMap两种有序Map实现。TreeMap基于红黑树,自动按key排序,查找效率O(logN),适合排行榜等排序场景;LinkedHashMap在HashMap基础上增加双向链表维护插入/访问顺序,查找效率O(1),适合缓存等顺序敏感场景。两者在底层结构(红黑树vs哈希表+链表)、排序方式、查询效率等方面存在显著差异。若需排序选TreeMap,需保持插入顺序选LinkedHashMap,仅需快速查找则用普通HashMap。文中通过代码示例结构图解

weixin_45653328的博客111 709

HashMap、LinkedHashMap TreeMap 的底层原理

本文对比分析了HashMap、LinkedHashMapTreeMap的核心原理。HashMap采用数组+链表/红黑树结构,无序但查询高效(O(1));LinkedHashMap通过双向链表维护插入/访问顺序,适合LRU缓存;TreeMap基于红黑树实现,保证键值有序(O(logn)),支持范围查询。三者各有优势:HashMap通用高效,LinkedHashMap适合有序场景,TreeMap适用于排序范围查询。选择时需权衡排序需求、性能表现内存占用。

2502_94251649的博客 858
上一篇: HashMap的put源码解析
下一篇: LinkedBlockingQueue源码分析
竹下星空
博客等级 码龄10年 86粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值