博客
关于我
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/

你可能感兴趣的文章
Python os和sys模块
查看>>
python os文件/目录
查看>>
Python PyQt5 将不再显示此消息复选框添加到 QMessageBox
查看>>
Python PyQt5:如何使用 PyQt5 显示错误消息
查看>>
Python pytest 面试题!
查看>>
Python pytz 时区函数返回一个相差 9 分钟的时区
查看>>
python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
查看>>
Python random和json模块
查看>>
Python random模块seed理解
查看>>
python range()函数
查看>>
Python rdflib可传递查询
查看>>
python redis 集群_python 搭建redis集群
查看>>
python redis连接,在Python中使用Redis连接池的正确方法
查看>>
python regex_Python RegEx
查看>>
Python Seborn绘制空白直方图
查看>>
Python Selenium - 获取href值
查看>>
Python Selenium实现自动化测试及Chrome驱动使用!
查看>>
Python Selenium搭建UI自动化测试框架
查看>>
Python Selenium模块详解
查看>>
Python selenium爬取影评生成词云图
查看>>