Java中的常用Map:HashMap、Hashtable、LinkedHashMap、Tre...
博客专区 > foxeye 的博客 > 博客详情
Java中的常用Map:HashMap、Hashtable、LinkedHashMap、Tre...
foxeye 发表于5年前
Java中的常用Map:HashMap、Hashtable、LinkedHashMap、Tre...
  • 发表于 5年前
  • 阅读 416
  • 收藏 5
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。不允许键重复,重复就会覆盖掉。从概念上而言,您可以将 List 看作是具有数值键的 Map。而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。

Java自带了各种Map类,可归为三种类型:

1.通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现

  • HashMap
  • Hashtable
  • Properties
  • LinkedHashMap
  • IdentityHashMap
  • TreeMap
  • WeakHashMap
  • ConcurrentHashMap

2.专用 Map,您通常不必亲自创建此类 Map,而是通过某些其他类对其进行访问

  • java.util.jar.Attributes
  • javax.print.attribute.standard.PrinterStateReasons
  • java.security.Provider
  • java.awt.RenderingHints
  • javax.swing.UIDefaults

3.一个用于帮助实现您自己的 Map 类的抽象类

  • AbstractMap

我们今天主要来认识java.util包中的HashMap、Hashtable、LinkedHashMap、TreeMap。

Hashmap:

  • 最常用的Map
  • 根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度
  • 遍历时取得数据的顺序是完全随机的
  • 最多只允许一条记录的键为Null,允许多条记录的值为 Null
  • 不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致
  • 使用用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap

Hashtable:

  • 与 HashMap类似
  • 它继承自Dictionary类
  • 不允许记录的键或者值为空
  • 支持线程的同步,即任一时刻只有一个线程能写Hashtable
  • 线程同步导致Hashtable在写入时会比较慢

LinkedHashMap:

  • HashMap的一个子类
  • 保存了记录的插入顺序
  • 先进先出,遍历时先得到的记录是先插入的,可以在构造时用带参数,按照应用次数排序
  • 在遍历的时候会比HashMap慢。
  • 例外情况,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关

TreeMap:

  • 实现SortMap接口
  • 默认是按键值的升序排序,也可以指定排序的比较器
  • 当用Iterator 遍历TreeMap时,得到的记录是排过序的

 

总结:

  • 用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择
  • 按自然顺序或自定义顺序遍历键,那么TreeMap会更好
  • 出的顺序和输入的相同,那么用LinkedHashMap 可以实现,可以按读取顺序来排列

 

参考:

标签: java集合 Map
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 16
博文 76
码字总数 17049
×
foxeye
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: