linkedHashMap

java 中 LinkedHashMap使用总结 初识LinkedHashMap 上两篇文章讲了HashMap和HashMap在多线程下引发的问题,说明了,HashMap是一种非常常见、非常有用的集合,并且在多线程情况下使用不当会有线程安全问题。 大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺 阅读详情
package test;

import java.util.AbstractSet;
import java.util.Iterator;
import java.util.Set;

public class LinkedHashMap<K, V>{
	
	Node<K, V>[] table;//链表数组  存储结构
	
	Node<K, V> head,tail;//双向链表的头尾

	@SuppressWarnings("unchecked")
	public LinkedHashMap() {
		table = new Node[10];
	}

	//根据key计算数组下标  如果数组该下标已存在元素 则改为存该元素  并将该元素的next指向原元素
	public Node<K, V> put(K key, V value) {
		Node<K, V> node;
		if ((node = this.getNode(key)) != null) {
			node.value = value;
		} else {
			Node<K, V> newNode = createNewNode(key, value);
			node = table[hash(key)];
			newNode.next = node;
			table[hash(key)] = newNode;
			node = newNode;
		}

		return node;
	}
	
	private Node<K, V> createNewNode(K key, V value){
		Node<K, V> newNode = new Node<K, V>(key, value);
		if(tail==null) {
			head=newNode;
			tail=newNode;
		}else {
			tail.after=newNode;
			newNode.before=tail;
			tail=newNode;
		}
		return newNode;
	}

	//根据key计算数组下标 再遍历链表找到相应的key对应的value
	public Node<K, V> getNode(K key) {

		Node<K, V> node = this.table[hash(key)];

		if (node != null) {
			if (node.key.equals(key)) {
				return node;
			} else {
				while ((node = node.next) != null) {
					if (node.key.equals(key)) {
						return node;
					}
				}
			}
		}

		return node;
	}

	public V get(K key) {

		Node<K, V> node = this.getNode(key);

		return node == null ? null : node.value;
	}

	public int hash(K key) {
		int hashcode = key.hashCode() % 10;
		return hashcode;
	}
	
	//链表节点内部类
	@SuppressWarnings("hiding")
	class Node<K, V> {
		Node<K, V> next,after,before;
		K key;
		V value;

		public Node(K key, V value) {
			// System.out.println("hash node ...");
			this.key = key;
			this.value = value;
		}
	}

	//key set 内部类 维护key值
	final class HashMapKeySet extends AbstractSet<K> {
		public final Iterator<K> iterator() {
			return new HashMapKeyIterator();
		}

		@Override
		public int size() {
			// TODO Auto-generated method stub
			return 0;
		}
	}

	
	//实际管理key值得迭代器 按数组下标顺序遍历节点
	final class HashMapKeyIterator implements Iterator<K> {


		private Node<K, V> node = null;

		@Override
		public boolean hasNext() {

			if (node != null) {
				node=node.after;
			} else {
				node=head;
			}

			return node != null;
		}

		@Override
		public K next() {
			return node.key;
		}

	}

	public Set<K> keySet() {
		return new HashMapKeySet();
	}

	public static void main(String args[]) {
		LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
		for (int i = 0; i < 100; i++) {
			map.put(i + "", "a");
		}

		for (String key : map.keySet()) {
			System.out.println(key + "==>" + map.get(key));
		}

		System.out.println("##################");

		map.put("1", "c");
		map.put("4", "d");

		for (String key : map.keySet()) {
			System.out.println(key + "==>" + map.get(key));
		}
	}
	
}

 

PICO SCOPE 二次开发 基于C#开发一个简单的PICO示波器的上位机工作,与MCC600运动控制卡一起,实现数据自动采集 阅读详情

相关推荐

从X86到ARM:将VINS-Fusion-GPU和ego-planner迁移到Jetson Orin-NX时,我踩过的那些‘环境差异’坑

本文详细介绍了将VINS-Fusion-GPU和ego-planner从X86平台迁移到Jetson Orin-NX(ARM架构)时遇到的环境差异问题及解决方案。内容涵盖ARM与X86的架构差异、依赖管理、性能调优和硬件接口适配,特别强调了CUDA在ARM平台上的优化配置和内存访问技巧,帮助开发者高效完成跨平台迁移。

weixin_42647395的博客 119

hashmap如何得到数组下标

长度16或者其他2的幂,Length-1的值是所有二进制位全为1,这种情况下,index的结果等同于HashCode后几位的值。只要输入的HashCode本身分布均匀,Hash算法的结果就是均匀的。计算book的hashcode,结果为十进制的3029737,二进制的101110001110101110 1001。假定HashMap长度是默认的16,计算Length-1的结果为十进制的15,二进制的1111。可以说,Hash算法最终得到的index结果,完全取决于Key的Hashcode值的最后几位。

688

如何快速下载Gaia DR3星表数据?中国虚拟天文台镜像站保姆级教程

本文提供了一份详细的保姆级教程,指导用户如何通过中国虚拟天文台镜像站高速、稳定地下载Gaia DR3星表数据。文章详细介绍了镜像站的访问地址、数据组织结构,并给出了使用wget、aria2c等工具进行批量下载的实战策略,帮助国内用户避开国际网络延迟,高效获取近20亿颗天体的海量数据。

weixin_29231263的博客 301

java容器系列五(LinkedHashMap详解)

参考博文:https://blog.youkuaiyun.com/future234/article/details/80704005 一,LinkedHashMap概述 1,允许key为null,允许value为null 2,与HashMap最大区别:默认情况下,遍历顺序就是元素插入顺序。 LinkedHashMap的Entry static class Entry&lt;K,V&gt; extends H...

lc138544的博客 634

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6171

使用菱FX5U系列PLC实现以太网通信的具体方法示例

接下来,我们将创建一个简单的CPU通信功能,以实现与其他设备的以太网通信。在上述代码中,我们首先设置访问号,然后创建一个数据读取命令(M_READ)和一个数据写入命令(M_WRITE)。此外,在实际应用中,您还需要确保PLC和其他设备之间的网络连接正常,并且遵循相应的通信协议。在上述代码中,我们执行了数据读取命令,并将接收到的响应存储在M_RESPONSE变量中。通过简单CPU通信功能,菱FX5U系列PLC可以实现与其他设备的以太网通信。我们将提供相应的源代码和详细的说明,以帮助您轻松实现这一功能。

DevCyberX的博客 1525

HashMap

package test; import java.util.AbstractSet; import java.util.Iterator; import java.util.Set; public class HashMap<K, V> { Node<K, V>[] table;//链表数组 存储结构 @SuppressWarnings("unchecke...

caideb的博客 181

AIGC游戏本地化:用AI实现多语言自动翻译

游戏本地化是游戏全球化战略的关键环节,传统人工翻译方式成本高、周期长。本文旨在探讨如何利用AIGC技术实现高效、准确、低成本的游戏多语言自动翻译解决方案。我们将覆盖从文本翻译到语音合成的完整本地化流程,重点关注AI技术在游戏特定语境下的应用优化。文章首先介绍游戏本地化的核心挑战和AI解决方案,然后深入讲解关键技术原理,接着通过实战项目演示具体实现,最后讨论应用场景和未来趋势。AIGC:人工智能生成内容,指利用AI技术自动生成文本、图像、音频等内容本地化(Localization)

AI 领航者的博客 1337

LinkedHashMap剖析

LinkedHashMap剖析简介LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序。HashMap与LinkedHashMapLinkedHashMap 实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个运行于所有条目的双重链

ExcellentYuXiao的专栏 1293

对CryptoDriver里密钥格式定义的探索(1)

一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。

认真搞搞汽车MCU 527

【GLM5】手把手教你在openclaw中白嫖英伟达羊毛

openclaw很强,但是也很贵,每一次请求都会消耗大量的token。而英伟达平台正好可以白嫖免费的模型,于是,我们一拍即合。

Science prince的博客 3820

java 8 map convert anthor map ,通过转换成有序的LinkedHashMap,获取key值对应的下标

`` Map<String,Integer> 转成有序的排行榜 TreeMap<String, Integer> public static Integer getStatisticRank(String id, Map<String, Integer> idCntMap , Integer rank){ TreeMap<String, Integer> collect = idCntMap .entry

qq_35523417的博客 1762

102、栅极驱动芯片选型与设计

文章摘要 本文分享了栅极驱动芯片选型与设计的实战经验。通过一次因驱动芯片选型不当导致的炸管事故,作者总结了栅极驱动芯片选型的五个关键参数:峰值驱动电流、驱动电压范围、传播延迟匹配、欠压锁定和隔离等级。文章详细分析了自举电路设计中的常见陷阱,以及栅极电阻对开关特性的影响,并强调了PCB布局布线的重要性。最后,作者提供了七条实用建议,包括避免通用型驱动芯片、关注CMTI参数、使用插件电阻等。核心观点是:栅极驱动设计需要综合考虑参数匹配、电路布局和实际调试,示波器实测波形是验证设计的唯一标准。

2401_88858637的博客 44

LinkedHashMap详解

一、概念及概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。 当我们希望有顺序地去存储key-value时,就需要使用Linke...

pengjiawei@的专栏 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

LinkedHashMap 简介

是 Java 集合框架中HashMap的一个子类,它继承了HashMap的所有属性和方法,并且在HashMap的基础重写了方法。使之拥有顺序插入和访问有序的特性。

Mr.W的博客 1381

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinkedHashMap 全面深度解析

LinkedHashMap是HashMap的子类,在哈希表高效存取的基础上,通过双向链表维护元素顺序,支持插入顺序或访问顺序遍历。其核心在于Entry节点扩展了before/after指针,形成独立于哈希桶的双向链表。accessOrder参数控制两种模式:插入顺序保持put顺序,访问顺序则在get/put时移动元素至链表尾部实现LRU策略。通过重写removeEldestEntry方法可轻松实现LRU缓存,在O(1)时间复杂度下平衡了性能与有序性,适用于缓存、日志等场景。

csdn_silent的博客 2014

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LinkedHashMap和HashMap的区别

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

weixin_44796253的博客 1万+

LinkedHashMap

通过在其哈希表条目结构中增加两个指针(before和after),维护一个双向链表,从而保证元素的有序性。默认情况下,它按插入顺序迭代元素;如果在构造时指定为true,则按访问顺序迭代元素。这使得能够在特定的顺序要求下提供高效的键值对存储和访问。

weixin_44794897的博客 2042

HashMap、LinkedHashMap、TreeMap

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

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

HashMap和LinkedHashMap

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

gyijh的博客 1128

LinkedHashMap 如何实现排序

本文主要介绍了LinkedHashMap 定义及使用场景,以及LinkedHashMap 实现排序原理,对于LinkedHashMap 了解与使用有一定帮助。

qq_43016560的博客 2599

linkedHashMap的应用

一. 概述:          LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。LinkedHashMap实现与HashMap的不同之处在于,LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序(insert-order)或者是访问顺序,其中默认的迭代访问顺序就是插入顺序,即可以按插入的顺序遍历元

kiss_the_sun的专栏 1万+

HashMap、LinkedHashMap、TreeMap三者的区别

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

weixin_46425661的博客 2009

LinkedHashMap源码

是 Java 提供的一个集合类,它继承自HashMap,并在HashMap支持遍历时会按照插入顺序有序进行迭代。支持按照元素访问顺序排序,适用于封装 LRU 缓存工具。因为内部使用双向链表维护各个节点,所以遍历时的效率和元素个数成正比,相较于和容量成正比的 HashMap 来说,迭代效率会高很多。逻辑结构如下图所示,它是在HashMap基础上在各个节点之间维护一条双向链表,使得原本散列在不同 bucket 上的节点、链表、红黑树有序关联起来。是 Java 集合框架中HashMap。

埃泽漫笔 1176

HashMap vs LinkedHashMap

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

weixin_44612246的博客 1076

LinkedHashMap如何保证顺序性

一. 前言 先看一个例子,我们想在页面展示一周内的消费变化情况,用echarts面积图进行展示。如下: 我们在后台将数据构造完成 HashMap<String, Integer> map = new HashMap<>(); map.put("星期一", 40); map.put("星期二", 43); map.put("星期三", 35); map.put("星期四",...

weixin_30315435的博客 2287
上一篇: HashMap
下一篇: 选择排序
knife1220
博客等级 码龄15年 33粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值