HashMap,LinkedHashMap,TreeMap的区别

Map集合之LinkedHashmap LinkedHashmap源码剖析 LinkedHashMap简介 LinkedHashMapHashMap 的子类,与 HashMap 有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put 到 LinkedHashmap 的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序与输入顺序相同 LinkedHashMap 可以用来实现 LRU 算法 LinkedHashMap 同样是非线程安全的,只在单线程环境下使用 LinkedHashMap源码 publi 阅读详情

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

 

 

1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
   a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
   b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象
       才可以真正定位到键值对应的Entry.
   c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
   a. Comparator可以在创建TreeMap时指定
   b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
   c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.

 

 

注意: 
1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。 
2、Set和Collection拥有一模一样的接口。 
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get) 
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。 
5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。 
      HashMap会利用对象的hashCode来快速找到key。 
    *     hashing 
          哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。 
          我们都知道所有存储结构中,array查找速度是最快的。所以,可以加速查找。 
      
          发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。 
6、Map中元素,可以将key序列、value序列单独抽取出来。 
使用keySet()抽取key序列,将map中的所有keys生成一个Set。 
使用values()抽取value序列,将map中的所有values生成一个Collection。 
为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

                                                                                                                                                                       ----------------------转自FG2006

                                                                                                                                             

从源码理解LinkedMapHashMap区别 前面几篇从源码角度分析了HashMap put遍历过程HashMap数据结构以及put过程,HashMap遍历原理,通过上面两篇分析HahMap遍历数据的顺序是随机的,LinkedHashMapHashMap唯一的不同是后者遍历的是有序的。数据结构HashMap使用的是数组+单链表的数据结构(本质上是数组,数组的每个元素是一个单向链表),LinkedHashMap使用的是数组+双向链表数据结构。 阅读详情

相关推荐

HashMapLinkedHashMapTreeMap区别

Map主要用于存储键值对,根据键得到值,因此不允许键重复,但允许值重复。 一. HashMap HashMap比较常用,它根据键的值HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得的数据的顺序完全是随机的。 HashMap最多只允许一条记录的键为null;允许多条记录的值为null。 HashMap不支持...

ANGEL CITY 6070

深入理解HashMapLinkedHashMap区别

简介 我们知道HashMap的变量顺序是不可预测的,这意味着便利的输出顺序并不一定HashMap的插入顺序是一致的。这个特性通常会对我们的工作造成一定的困扰。为了实现这个功能,我们可以使用LinkedHashMapLinkedHashMap详解 先看下LinkedHashMap的定义: public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> LinkedHas

vx539413949的博客 2150

BES平台集成第三方音频算法避坑指南:以声加ENC为例,聊聊文件放置、内存分配与授权那些事

本文详细解析了在BES平台上集成声加ENC降噪算法的全流程,包括技术选型、系统架构设计、内存管理及量产授权等关键环节。特别针对BES平台的双核架构内存限制,提供了文件放置、内存分配与授权验证的实用解决方案,帮助开发者高效实现音频算法集成。

weixin_33720956的博客 487

Map集合详解:HashMapLinkedHashMap

Map的实现类有多个,使用的比较多是HashMap,其他的还有LinkedHashMap、HashTable、EnumMapTreeMap等 1、HashMap 1.底层原理: HashMap有几种常见构造方法: //构造一个空的 HashMap ,默认初始容量(16)默认负载系数(0.75)。 HashMap<Object, Object> hashMap = new HashMap<>(); //构造一个空的 HashMap具有指定的初始容量默认负载因子(0.75)。 Ha

大都督 2393

HashMapLinkedHashMapTreeMap三者的区别

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

weixin_46425661的博客 1992

Java中HashMap,LinkedHashMap,TreeMap区别

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap TreeMap Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取

Frimish的博客 714

LinkedHashMaphashMapTreeMap区别

1、区别 LinkedHashMap继承于HashMap,基于HashMap双向链表来实现的。 HashMap无序;LinkedHashMap有序 LinkedHashMap是线程不安全的。 2、应用 HashMap 插入顺序 hashMap.put("name1", "josan1"); hashMap.put("name2", "josan2"); hashMap.put...

剑来 2236

TreeMapHashMapLinkedHashMap区别

TreeMapHashMap、LindedHashMap区别

weixin_42631192的博客 453

Java之HashMap系列--HashMap,TreeMap,LinkedHashMap区别

本文介绍Java的HashMapTreeMapLinkedHashMap之间的区别

IT利刃出鞘的博客 1万+

java hashmaptreemap_HashMapLinkedHashMapTreeMap之间的区别

问题Java中的 HashMapLinkedHashMap TreeMap 有什么区别?我没有看到它们有任何输出差异,因为它们都有keySetvalues。什么是 Hashtable?Map m1 = new HashMap();m1.put("map", "HashMap");m1.put("schildt", "java2");m1.put("mathew", "Hyden");m1....

weixin_39520149的博客 194

HashMapLinkedHashMapTreeMap之间的区别

What is the difference between HashMap , LinkedHashMap and TreeMap in Java? Java中的HashMap , LinkedH

w36680130的博客 280

HashMapLinkedHashMapTreeMap区别使用场景

1. HashMap中k的值没有顺序,常用来做统计。 2.LinkedHashMap吧。它内部有一个链表,保持Key插入的顺序。迭代的时候,也是按照插入顺序迭代,而且迭代比HashMap快。 3. TreeMap的顺序是Key的自然顺序(如整数从小到大),也可以指定比较函数。但不是插入的顺序。 4.Hashtable与 HashMap类似,它继承自Dictionary类、不同的是:它不允许记...

茄厛風吟 1169

Java中HashMapLinkedHashMapTreeMap区别使用场景

1. HashMap中k的值没有顺序,常用来做统计。 2.LinkedHashMap吧。它内部有一个链表,保持Key插入的顺序。迭代的时候,也是按照插入顺序迭代,而且迭代比HashMap快。 3. TreeMap的顺序是Key的自然顺序(如整数从小到大),也可以指定比较函数。但不是插入的顺序。 4.Hashtable与 HashMap类似,它继承自Dictionary类、不同的是:它不允许记录的键或者值为空;它支持线程的同步、即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtabl

netuser1937的博客 1613
上一篇: 记住密码功能的制作
下一篇: 使用jfreeChart生成柱状图,折线图,饼图等
K_122
博客等级 码龄11年 11粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值