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

你可能感兴趣的文章
php容许ajax跨域,PHP设置允许ajax跨域请求的两种常见方法
查看>>
RabbitMQ进程结构分析与性能调优
查看>>
PHP对接百度地图
查看>>
PHP对表单提交特殊字符的过滤和处理
查看>>
php对象引用和析构函数的关系
查看>>
RabbitMQ HTTP 认证后端项目常见问题解决方案
查看>>
PHP将图片转换成base64格式(优缺点)
查看>>
php将多个值的数组去除重复元素
查看>>
php局域网上传文件_PHP如何通过CURL上传文件
查看>>
PHP工具插件大全
查看>>
php布尔值的++
查看>>
PHP常量、变量作用域详解(一)
查看>>
PHP应用目录结构设计
查看>>
PHP应用程序连接MSQL数据库Demo(附crud程序)
查看>>
PHP应用程序连接Oracle数据库Demo(附Oracle客户端安装文件)
查看>>
PHP开发api接口安全验证
查看>>
PHP开发规范PSR
查看>>
PHP开发遇到错误0001
查看>>
rabbitmq guestguest用户不能远程登录
查看>>
php异常处理
查看>>