博客
关于我
Map linkedMap,HashTable
阅读量:659 次
发布时间:2019-03-15

本文共 1722 字,大约阅读时间需要 5 分钟。

哈希表和链表实现的Map接口,具有可预测的迭代次序。这种实现不同于HashMap,它通过维护双向链表来记录元素的位置。这种结构赋予了迭代操作可预测的顺序,通常称为插入顺序。也就是说,键按照第一次被插入时的顺序被组织起来。在重新插入键时,即当Map.containsKey(k)返回true之前调用的put(k, v)会更新键时,插入顺序不受影响。

展开阅读

哈希表和链表结合的结构使得这种Map实现既高效又具有可预测的行为。与HashMap不同,LinkedHashMap会记录元素的位置顺序,这使得迭代操作能够按照特定规则执行。这种设计使得LinkedHashMap非常不适合以插入顺序排序的场景。

底层原理

LinkedHashMap的底层结构包括一个哈希表,用于快速定位键的位置,以及一个双向链表,用于记录键的插入顺序。哈希表允许O(1)的平均时间复杂度进行查找、删除和插入操作,而链表则用于记录元素的访问顺序。

代码示例

下面的代码首先创建了一个HashMap,并在其基础上创建了一个LinkedHashMap。区别在于,当相同的键多次插入时,最后一次插入会覆盖前一次的值,但不影响键的位置顺序。

public class Demo05LinkedHashMap {    public static void main(String[] args) {        // 创建一个HashMap        Map
map = new HashMap<>(); map.put("a", "a"); map.put("c", "c"); map.put("b", "b"); map.put("a", "d"); System.out.println(map); // {a=d, b=b, c=c} key值不允许重复,无序 // 创建一个LinkedHashMap Map
map1 = new LinkedHashMap<>(); map1.put("a", "a"); map1.put("c", "c"); map1.put("b", "b"); map1.put("a", "d"); System.out.println(map1); // {a=d, c=c, b=b} key值不允许重复,有序 }}

显示效果

执行上述代码,可以看到以下输出结果:

{a=d, b=b, c=c}------------------------------------------------------------{a=d, c=c, b=b}

可以看到,HashMap的输出结果是无序的,而LinkedHashMap的输出结果则是按照插入顺序排列的。

Hashtable的特点

Hashtable<K, V> 是集合框架中最古老的Map实现之一。它具有以下特点:

  • 线程安全:适用于多线程环境,所有操作都是原子性的。
  • 哈希表结构:与HashMap类似,使用哈希表实现快速查找。
  • 性能:由于线程安全的设计,性能相对较慢,尤其是在单线程环境中,可以使用HashMap来替代。
  • 不允许存储null值:键和值都不能为null。
  • 历史意义:在Java 1.2之前,Hashtable和Vector是集合框架的核心类,但后来逐渐被HashMap和ArrayList取代。
  • 重要子类:Properties是Hashtable的子类,与IO流结合使用,广泛应用于读写配置文件。

总结

Hashtable是一个线程安全的Map实现,使用哈希表和链表结构,性能较慢。LinkedHashMap则通过额外的双向链表结构,记录元素的插入顺序,使其迭代行为具有可预测性。无论是Hashtable还是LinkedHashMap,都不允许存储null值,适用于键值对的存储和查找操作。在实际开发中,可以根据具体需求选择合适的实现类。

转载地址:http://xljmz.baihongyu.com/

你可能感兴趣的文章
Oracle10g下载地址--多平台下的32位和64位
查看>>
Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
查看>>
oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
查看>>
Oracle11G基本操作
查看>>
Oracle11g服务详细介绍及哪些服务是必须开启的?
查看>>
Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
查看>>
oracle12安装软件后安装数据库,然后需要自己配置监听
查看>>
Oracle——08PL/SQL简介,基本程序结构和语句
查看>>
Oracle——distinct的用法
查看>>
Oracle、MySQL、SQL Server架构大对比
查看>>
oracle下的OVER(PARTITION BY)函数介绍
查看>>
Oracle中DATE数据相减问题
查看>>
Oracle中merge into的使用
查看>>
oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
查看>>
oracle中sql的case语句运用--根据不同条件去排序!
查看>>
Oracle中Transate函数的使用
查看>>
oracle中关于日期问题的汇总!
查看>>
Oracle中常用的语句
查看>>
Oracle中序列的操作以及使用前对序列的初始化
查看>>
oracle中新建用户和赋予权限
查看>>