集合框架Map介绍

1.什么是Map数据结构

  • 底层是一个数组结构,数组中的每一项又是一个链表,即数组和链表的结合体
  • transient Node<K,V>[] table;,table是数组,数组的元素是Entry
  • Entry元素是一个key-value键值对,它持有一个指向下一个Entry元素的引用,table数组的每个Entry元素同时也作为当前Entry链表的首节点,也指向了该链表的下一个Entry元素

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrYbpf2w-1662596177151)(..\img\image-20220907115934438.png)]

2.常见的实现类

  • HashMap
    • 一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射
    • 是基于hash的原理,使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当put()方法传递键和值时,会先对键调用hashCode()方法,计算并返回的hashCode是用于找到Map数组的bucket位置来存储Entry对象的,是非线程安全的,所以HashMap操作速度很快
  • TreeMap
    • 在数据的存储过程中,能够自动对数据进行排序,实现了SortedMap结构,它是有序的集合
    • TreeMap使用的存储结构是平衡二叉树,也称为红黑树
    • 默认排序规则:按照key的字典顺序来排序(升序),也可以自定义排序规则,要实现Comparator接口

3.HashMap和TreeMap应该怎么选择

  • HashMap可实现快速存储和检索,但缺点是包含的元素是无序的,适用于在Map中插入、删除和定位元素

  • TreeMap能便捷的实现对其内部元素的各种排序,但其性能比HashMap差,适用于按自然顺序或自定义顺序遍历键(key)

4.JDK1.7和JDK1.8中HashMap的主要区别

  • 底层实现由之前的“数组+链表”改为“数组+链表+红黑树”。
  • 当链表节点较少时仍然是以链表存在,当链表节点较多时,默认是大于8会转为红黑树

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1YszfMV4-1662596177152)(H:\img\image-20220907210159559.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值