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允许重复。

HashMap,TreeMap,LinkedHashMap学习相关推荐

  1. Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)

    关注微信公众号:CodingTechWork,一起学习进步. Map Map集合介绍   Map(也称为字典.关联数组)是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何 ...

  2. java linkedhashmap_java学习-hashMap和linkedHashMap

    1.hashMap和linkedHashMap和treeMap 1 * LinkedHashMap是继承于HashMap,是基于HashMap和双向链表来实现的. 2 * HashMap无序:Link ...

  3. TreeMap、HashMap、LinkedHashMap的区别

    TreeMap.HashMap.LinkedHashMap的区别:

  4. HashMap、LinkedHashMap、TreeMap的深入认识

    HashMap,LinkedHashMap,TreeMap都属于Map. Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. HashMap 是一个最 ...

  5. 彻底理解HashMap及LinkedHashMap

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/fuzhongmin05/article/details/104355841 Ha ...

  6. HashMap和LinkedHashMap的比较使用

    由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下. import java.util.HashMap; import java.util.Iterator; import ...

  7. Map集合HashMap TreeMap的输出方法

    Map集合HashMap TreeMap的输出方法     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51934301 ...

  8. 深入理解HashMap和LinkedHashMap的区别

    文章目录 简介 LinkedHashMap详解 插入 访问 removeEldestEntry 总结 深入理解HashMap和LinkedHashMap的区别 简介 我们知道HashMap的变量顺序是 ...

  9. HashMap TreeMap专题

    刷leetcode的时候,经常性碰到需要使用HashMap或者TreeMap的场景,今天来总结一些它们的用法: TreeMap public class MapCase {public static ...

  10. Map接口、HashMap、LinkedHashMap

    Map接口.HashMap.LinkedHashMap 1. 概述 Map接口和Collection接口是完全不同的,Collection<E>接口是单列集合,就一个泛型:Map<K ...

最新文章

  1. Websphere: security-constraint in web.xml doesn't
  2. Scala模式匹配,case 字符串,case 匹配类型,case 匹配数组,case 匹配List,case 匹配元组,case匹配case class和case object
  3. YOLOv5训练coco128数据集流程
  4. php 异常 重试,Python中异常重试的解决方案详解
  5. 前端学习(2536) request和response
  6. 关于Shell的一些常用命令
  7. python执行shell脚本报错_在python中执行shell命令:字符串错误
  8. matlab寻找直线_matlab寻找直线_Matlab 霍夫变换 ( Hough Transform) 直线检测
  9. 【转载】分析Windows的死亡蓝屏(BSOD)机制
  10. 功放限幅保护_功放限幅电路的制作方法
  11. JavaScript 设计模式核核心原理与应⽤实践(一)原则于核心思想
  12. pandas进阶 期中练习
  13. 闪电Android视频转换器,闪电手机视频格式转换器
  14. 洲际酒店集团加速布局西部世界,全力打造高品质中国山地旅游
  15. 零基础入门网络安全最直线距离的学习路线
  16. 计算机科学博士点,全国计算机博士点排名(全国前70名)
  17. excel输入公式显示公式_快速输入复杂的Excel公式
  18. 广州昊志,深圳爱贝科电主轴常用巴鲁夫BALLUAF电感式开关BES03Z8 、BES00FW 、BES00FT、BES00HJ参数
  19. AI视频识别电动二轮车闯红灯自动抓拍系统解决方案
  20. Excel数据分析工具:PowerPivot

热门文章

  1. Atitit.导出excel报表的设计与实现java .net php 总结
  2. paip.验证码识别的意义
  3. paip.提升用户体验---免维护列表字段
  4. php. 调试工具.trace
  5. 贝莱德砸10亿美元买下指数定制公司,释放什么信号?
  6. 得寸进尺的摩根大通 步步为营
  7. 阿里云正式发布云原生人才培养合作计划
  8. 进阶之路:Java 日志框架全画传(中)
  9. 从AWS到阿里云: 产品体系差异分析 | 凌云时刻
  10. 阿里钉钉向1000万企业组织免费开放在家办公系统