LinkedHashMap与HashMap

Java中的Map,AbstractMap,SortedMap,NavigableMap,HashMap,LinkedHashMap,Hashtable,TreeMap区分 实现了Map中的绝大部分函数接口的抽象类,关系。 阅读详情

由于自己实践生成假数据,发现用hashmap生成的数据的位置都对不上,key与value不是按照输入的顺序;LinkedHashMap生成的数据与输入的顺序一致。

从网上找了个例子放这,以后方便查看。

 

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class TestLinkedHashMap {
  
  public static void main(String args[])
  {
   System.out.println("*************************LinkedHashMap*************");
   Map<Integer,String> map = new LinkedHashMap<Integer,String>();
   map.put(6, "apple");
   map.put(3, "banana");
   map.put(2,"pear");
    
   for (Iterator it =  map.keySet().iterator();it.hasNext();)
   {
    Object key = it.next();
    System.out.println( key+"="+ map.get(key));
   }
    
   System.out.println("*************************HashMap*************");
   Map<Integer,String> map1 = new  HashMap<Integer,String>();
   map1.put(6, "apple");
   map1.put(3, "banana");
   map1.put(2,"pear");
    
   for (Iterator it =  map1.keySet().iterator();it.hasNext();)
   {
    Object key = it.next();
    System.out.println( key+"="+ map1.get(key));
   }
  }
}

 

运行结果如下:

*************************LinkedHashMap*************
6=apple
3=banana
2=pear
*************************HashMap**************************
2=pear
6=apple
3=banana

分析:LinkedHashmap 的特点是put进去的对象位置未发生变化,而HashMap会发生变化.

再普及下:

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

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 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 可以实现,它还可以按读取顺序来排列.

HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。

HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

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

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

 

 

22. LinkedHashMap和HashMap有什么区别?为什么LinkedHashMap能保持元素的插入顺序? 使用哈希表来存储数据。每个元素的位置由其键的哈希码决定,元素存储在桶(bucket)数组中,多个元素可能映射到同一个桶(哈希碰撞)时,会形成链表或红黑树。这条双向链表按插入顺序或访问顺序链接所有的键值对,确保元素的顺序性。在内部维护了一个双向链表,该链表链接着所有的键值对,从而记录了元素的插入顺序或访问顺序。: 保持插入顺序或访问顺序,内存开销较大,适合需要顺序性和快速查找的场景。保持元素的插入顺序,或者按照访问顺序(如果设置为访问顺序模式)排列。当新的元素被插入时,它会被添加到链表的尾部,保持插入顺序。 阅读详情

相关推荐

FFmpeg音频转换避坑实录:为什么VOS的REC转MP3比WAV转MP3体积小一半?

本文深入解析了FFmpeg在VOS系统REC格式音频转换中的优化技巧,揭示了REC转MP3比WAV转MP3体积小一半的原因。通过分析REC格式的压缩特性、转码参数陷阱及FFmpeg调优方法,帮助开发者实现高效音频转换,显著降低存储成本。

weixin_30752699的博客 526

LinkedHashMap和HashMap的比较使用

由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下。 import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class TestLinkedHashMap { public s...

weixin_30399797的博客 514

海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)

https://www.hikrobotics.com/machinevision/service/download?module=0

weixin_41965898的博客 2万+

HashMap转LinkedHashMap

有个方法的传参是LinkedHashMap,现在有的是一个HashMap类型的参数。 原来的代码是: repairPlanService.isCanDelete(id, (LinkedHashMap<String,Object>)paramMap); 一看代码么得问题,实际上已经错了这里。LinkedHashMap是HashMap的子类,这里强制类型转换让父类变子类了这里成了。 就跟 狗、哈士奇之间的逻辑一样了,哈士奇是狗,但狗不一定是哈士奇是吧。 最后解决方案实际就是将键值取出来重

一枚花小盛 4405

案例分析|一篇文章带你看懂养鸡场智慧管理系统

养鸡场智慧管理系统是为了满足现代化养鸡业对精细化管理的需求而设计的一款专业软件。随着科技的发展和农业产业的升级,传统的手工记录和管理方式已无法满足高效、准确和实时的数据跟踪需求。本软件旨在通过集成各种功能模块,帮助养鸡场主实现从鸡苗孵化、饲养管理、饲料控制到销售结算等全链条的智能化操作。该系统的核心目标是提升养鸡场的运营效率和盈利能力,通过自动化数据处理,减少人工误差,节省时间和精力。例如,孵化报表和记录模块可以帮助管理者实时监控孵化过程,及时调整策略;

muyu2980的专栏 930

Windows 11下WSL2安装CUDA避坑指南:从驱动版本匹配到环境变量配置

本文详细解析了在Windows 11的WSL2中搭建CUDA开发环境的完整流程与核心避坑要点。关键在于理解“驱动在Windows,工具链在Linux”的独特架构,并确保显卡驱动与CUDA Toolkit版本严格匹配。指南涵盖了从驱动验证、WSL-Ubuntu专用仓库安装、环境变量配置到GCC版本冲突、GPU算力不匹配等常见问题的解决方案,帮助开发者高效构建稳定的深度学习与高性能计算环境。

smartcontract5的博客 465

Map集合、 HashMap集合、LinkedHashMap集合、Hashtable集合

Map集合 Map集合的特点 Map集合是一个双链表结构的集合,一个元素包含两个值(key,value) Map集合中的元素,key和value的数据类型可以相同也可以不同 Map集合中的元素,key是不允许重复的,value是可以重复的 Map集合中的元素,key和value是一一对应的 Map接口中的常用方法 V put(K key, V value) 将指定的值与此映射中的指定键关联(可选操作)。 V remove(Object key) 如果存在一

wseeyouagain的博客 273

Intel Arc显卡玩《三角洲行动》报错?手把手教你修改注册表跳过验证

本文针对Intel Arc显卡用户在运行《三角洲行动》时遇到的驱动验证报错问题,提供了详细的解决方案。通过安全修改Windows注册表,添加特定键值以跳过游戏驱动兼容性验证,并结合游戏内图形设置与Intel驱动面板的优化建议,旨在帮助玩家顺利进入游戏并提升游戏帧率与运行稳定性。

weixin_29310605的博客 695

各种Map的区别,想在Map放入自定义顺序的键值对

今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序。 一、简单介绍Map在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍): ...

weixin_33854644的博客 1139

PreScan快速入门到精通第二十一讲驾驶员模型之驾驶员在环

请注意,操纵杆的输出角度是以度为单位的,而方向盘执行器希望其输入是以弧度为单位的。当选择一个支持的方向盘时,PreScan会自动将按钮映射到正确的功能上(如换挡),并设置轴的正确范围(如转向角度)。该系统中的所有其他组件都是为了提供正确的按钮映射,并为所选的方向盘设置正确的范围。对于每一个额外连接的控制器,它们的ID会增加一个,例如第二个控制器的设备ID为1,第三个控制器的设备ID为2,等等。由于所有的方向盘最初放在编译表上的设备ID都是0,所以用户应该先进行正确的调整,将每个控制器设置为正确的设备ID。.

小明师兄的博客 1423

RT-DETR算法优化改进:Backbone改进 | HGBlock完美结合PPHGNetV2 GhostConv

GhostConv助力RT-DETR ,HGBlock与PPHGNetV2 GhostConv完美结合

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2909

LinkedHashMap和HashMap的区别

HashMap HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null,其中HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null...

weixin_44796253的博客 1万+

Python 爬虫进阶技巧:新手必学的反爬突破与效率优化

本文系统总结了爬虫进阶的核心技巧,针对新手常见的反爬拦截、效率低下、动态页面解析等痛点问题,提出了可落地的解决方案。主要内容包括:通过随机UA池、代理IP池和Cookie池突破常见反爬机制;利用多线程/异步请求提升爬取效率;使用Selenium解析动态渲染页面;以及数据清洗方法提升数据质量。文中提供了完整的代码示例和实战对比数据,并强调爬虫开发应遵守合规性要求。这些技巧能帮助开发者快速提升爬虫实战能力,应对80%以上的常见爬取需求。

2503_91057718的博客 1436

HashMap和LinkedHashMap

HashMap和都实现了Map接口,因此它们共有一些常用的方法。

gyijh的博客 1128

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HashMap、LinkedHashMap、TreeMap三者的区别

HashMap、LinkedHashMap 和 TreeMap 都是 Java 集合中用于存储键值对的 Map 接口的实现类,本文重点介绍它们在底层数据结构、元素顺序、性能以及使用场景等方面存在的区别。

weixin_46425661的博客 2009

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HashMap vs LinkedHashMap

实际对大多数应用场景来说,我们只要记住第一个区别就可以了。如果某一场景要求按照存储时的顺序获取数据,那我们一定要记得不能用HashMap,必须用LinkedHashMap。本着二杆子程序员精神,我们假设你一定想知道所以然。所以我们还是从两者底层数据结构开始分析。

weixin_44612246的博客 1076

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LinkedHashMap与HashMap的区别

Map主要用于存储键(key)值(value)对,键是已知的,通过键来得到值,键不可以重复,值可以。 HashMap Map存储过程:计算key的hashCode值,确定位置;如果位置上有元素,用equals判断是否一致,如果一致,不存,如果不一致,遍历下一个节点继续判断equals。注:添加是添加到链表的尾部。 加载因子(扩容条件):默认0.75,空间存储75%后扩容。 扩容:将原来的元素重新...

Eve2018的博客 3460

彻底理解HashMap及LinkedHashMap

HashMap是Map族中最为常用的一种,也是 Java Collection Framework 的重要成员。HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Node节点链入一个双向链表的HashMap。ConcurrentHashMap是java.util.concurrent包的重要成员,...

Hopefully Sky的博客 5468

HashMap、LinkedHashMap、TreeMap

HashMap实现了Map接口,并且其底层是基于哈希表(散列表/数组)的数据结构。它使用键(Key)对象的哈希码来确定键值对(Entry)存储的位置。在Java 1.8及以后,当链表长度大于一定阈值(默认是8)时,链表会被转换为红黑树来提高搜索效率。

主要作为个人的笔记用,Not For Everyone。 3131

HashMap和LinkedHashMap的区别

无序其实是HashMap按照桶下标输出,有序是LinkedListHashMap按照链表输出。

brycegao321的博客 5730

HashMap 和 LinkedHashMap 的使用区别——找出你的最佳选择!

HashMap是一种基于哈希表的实现,它允许将键和值存储为一对一的映射。HashMap快速访问:由于使用哈希算法,HashMap在平均情况下具有常数时间复杂度的查找、插入和删除操作(O(1))。无序性HashMap不保证顺序。即使你以某种顺序插入元素,在迭代时也可能会得到不同的顺序。允许 null 值HashMap允许一个空键和多个空值。是HashMap的一个子类,结合了哈希表的高效性和链表的顺序特性。有序性维护了一个双向链表,按照插入的顺序排列元素。当你迭代。

龚小帅的博客 1483

HashMap与LinkedHashMap

HashMap与LinkedHashMap 简介 二者的区别 源码阅读 Best PracticesHashMap与LinkedHashMap1. 简介在日常开发中我们经常会批量操作数据,因此很多高级语言除了提供数组,还给我们提供很多高级的、抽象的数据类型来让我们处理批量数据时得心应手。由于这些轮子对于程序的性能是比较关键的轮子,因此很多语言都内置的提供了比较精致的实现。在java中,这种实现被称为

Spground 984

关于HashMap与LinkedHashMap的区别

关于HashMap与LinkedHashMap的区别 1、HashMap<String,String> hashmap = new HashMap<>(); 当在Map类的集合中使用HashMap时,输入的内容顺序是变化的,每一次运行都是不一样的。 2、LinkedHashMap<String,String> linkedhashmap = new Linke...

weixin_44508081的博客 369

【转】LinkedHashMap与HashMap

转载自: http://blog.youkuaiyun.com/llbupt/article/details/6633128  顾名思义LinkedHashMap是比HashMap多了一个链表的结构。 与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持2种排序一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3

qq_28385797的博客 1743

LInkedHashMap 和 HashMap 的区别

Map集合: 总共有五个子接口: Bindings, public interface Bindings extends Map<String,​Object> 表示key只能为String的Map; ConcurrentMap<K,​V>, ConcurrentHashMap是它的一个子类; ConcurrentNav...

ScorpC的博客 2248
上一篇: 记录spring的一些注解问题
下一篇: WdatePicker日历控件使用方法
tucailing
博客等级 码龄17年 1粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值