map 的分类和常见的情况

 java 为数据结构中的映射定义了一个接口 java.util.Map;它有四个实现类,分别是 HashMap Hashtable LinkedHashMap 和 TreeMap.

Map 主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重 复。

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

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

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

TreeMap 实现 SortMap 接口,能够把它保存的记录根据键排序,默认是按键值的升序排序, 也可以指定排序的比较器,当用 Iterator 遍历 TreeMap 时,得到的记录是排过序的。

一般情况下,我们用的最多的是 HashMap,在 Map 中插入、删除和定位元素,HashMap 是最 好的选择。但如果要按自然顺序或自定义顺序遍历键,那么 TreeMap 会更好。如果需要输出的 顺序和输入的相同,那么用 LinkedHashMap 可以实现,它还可以按读取顺序来排列.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值