【Thinking in Java】Map通过关联数组的简单实现

Jar包冲突问题原理及解决方案 主要介绍了Jar包冲突问题原理及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 立即下载

参考: Thinking in Java

简介

Map的数据保存是以键值对的形式进行数据的保存,这种键值对的关联形式又叫映射表,或者说关联数组,那么如何用一个简单的数组来实现Map的基本形式.

代码

/**
 * @description 关系数组,又称为映射表
 * 这是Map实现的基本思想,即用键值对的形式保存数据
 * @author paul
 * @date 2017年6月14日 下午3:06:59 
 * @update 2017年6月14日 下午3:06:59 
 * @version V1.0
 */
public class AssociativeArray<K, V> {
	private Object[][] pairs;
	//关联数组的下标
	private int index;
	
	public AssociativeArray(int length) {
		pairs = new Object[length][2];
	}
	
	/**
	 * @param key
	 * @param value
	 * @description 放入元素
	 * @author paul
	 * @date 2017年6月14日 下午3:22:25
	 * @update 2017年6月14日 下午3:22:25
	 * @version V1.0
	 */
	public void put(K key, V value) {
		if (index >= pairs.length)
			throw new ArrayIndexOutOfBoundsException();
		pairs[index++] = new Object[]{key, value};
	}
	
	/**
	 * @param key
	 * @return
	 * @description 根据key值取出元素
	 * @author paul
	 * @date 2017年6月14日 下午3:22:33
	 * @update 2017年6月14日 下午3:22:33
	 * @version V1.0
	 */
	@SuppressWarnings("unchecked")
	public V get(K key) {
		//遍历关联数组,找到key相等的,返回value
		for (int i=0; i<pairs.length; i++)
			if (key.equals(pairs[i][0]))
				return (V)pairs[i][1];
		return null;//没有找到返回null
	}
	
	/**
	 * @param key
	 * @return
	 * @description 是否有某个主键
	 * @author paul
	 * @date 2017年6月16日 下午10:46:46
	 * @update 2017年6月16日 下午10:46:46
	 * @version V1.0
	 */
	public boolean contains(K key) {
		for (int i=0; i<pairs.length; i++)
			if (key.equals(pairs[i][0]))
				return true;
		return false;
	}
	
	/**
	 * @return
	 * @description 是否为空
	 * @author paul
	 * @date 2017年6月16日 下午10:48:15
	 * @update 2017年6月16日 下午10:48:15
	 * @version V1.0
	 */
	public boolean isEmpty() {
		return pairs.length == 0;
	}
	
	/**
	 * 
	 * @description 清空元素
	 * @author paul
	 * @date 2017年6月16日 上午9:00:47
	 * @update 2017年6月16日 上午9:00:47
	 * @version V1.0
	 */
	public void clear() {
		for (int i=0; i<pairs.length; i++) {
			pairs[i][0] = null;
			pairs[i][1] = null;
		}
	}
	
	//重写toString
	public String toString() {
		StringBuffer result = new StringBuffer("{");
		for (int i=0; i<index; i++) {
			result.append(pairs[i][0].toString());
			result.append(":");
			result.append(pairs[i][1].toString());
			if (i < index - 1) {
				result.append(",");
			} else {
				result.append("}");
			}
		}
		return result.toString();
	}
	
	public static void main(String[] args) {
		AssociativeArray<String, String> aa = new AssociativeArray<String, String>(2);
		aa.put("1", "语文");
		aa.put("2", "English");
		System.out.println(aa.index);
		System.out.println(aa.toString());
	}
}
深入掌握英飞凌TriCore中断向量表 摘要:本文探讨了英飞凌Tc277芯片中断机制的原理与实现,重点解析了中断向量表基地址的链接文件定义方式、BIV寄存器的初始化过程以及每个中断条目的32字节空间分配规则。通过分析中断向量号(1-255)的计算方法,阐明了中断条目跳转地址(如STM0中断向量号37对应0x800F04A0)的生成逻辑。文章还揭示了.map文件中14字节跳转指令的组成原理,以及最终通过a14寄存器跳转到实际中断函数(如stm0Sr0ISR)的执行流程,为嵌入式开发人员理解中断处理机制提供了清晰的技术路径。 阅读详情

相关推荐

信号处理中的滤波器的阶数和谐波的理解

最近在读paper的时候,遇到了一些以前遗忘的问题,先重新查找,记录在这里,以备不时之查看。 我相信一定有小伙伴跟我有过一样的疑惑,那就是我们在使用滤波器的时候,总是遇到滤波器的阶数这个概念参数,我们很多都是根据别的paper里的设置,设置自己的科研参数,其实并不是很理解其中的含义: 其实我们常用的阶数N的意思是: 滤波器的阶数,就是指过滤谐波的次数,一般来讲,同样的滤波器,其阶

Miracle.Zhao的博客 2万+

kotlin.collections.ArraysKt.copyInto([B[BIII)[B解决方案

方法是在Kotlin 1.3版本中引入的,如果项目中使用了低于此版本的Kotlin,就会出现这个问题。通过查阅资料,这个错误通常是由于Kotlin版本不兼容导致的。将pom.xml中依赖改为1.3.70。

qq_59572227的博客 3399

最新版 Akamai 逆向 风控破解

经过测试,捷星 jetstar.com,德州仪器 ti.com,w6 wizzair.com,还有一些航空公司的都是可以实现一个并发的有需要的可以。

m0_72605044的博客 6614

Jar包冲突问题的排查和解决

Jar包冲突问题的排查和解决

luostudent的博客 6651

Android音频学习(一)——音频基础

在系统的学习Android音频之前,先了解音频的基础知识。

miemie2014的博客 1483

一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)

0.前言: 本文基于斯坦福Kristin Sainani 教授的学术论文写作公开课——SCI论文写作(Writing in the Sciences)。在此基础上进行章节顺序的重排及部分内容的删减,以方便第一次进行英语学术论文写作的同学快速上手。 时间充足和想要系统学习英文学术写作的同学,十分建议观看完整课程视频,一定会受益匪浅!课程地址如下: 课程B站地址:https://www.bilibili.com/video/BV1zv41177JQ 1.论...

Ogmx的博客 3万+

java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII)[B 的错误问题排查fabric-sdk-java

使用maven开发java项目对接fabric区块链的时候,通常需要使用fabric-sdk-java的jar包,目前最新版本是fabric-sdk-java2.2.22对接了fabric2.5.3环境,在调试时提示java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII)[B错误。经过排查发现是因为jar包中的okio和okhttp的包冲突导致的。排查可以使用。

大印的专栏 3596

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 221

【已解决】kotlin.collections.ArraysKt.copyInto([B[BIII)[B解决方案

但是接着报错,根据以下文章解决:https://blog.youkuaiyun.com/LucasLizx/article/details/124735269,加入kotlin依赖(版本号不能太低),就可以向数据库中写入数据了。

xiannvytt的博客 1680

3、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)

硬件工程师笔试面试学习

XU157303764的博客 7619

OpenClaw 超级 AI 实战专栏【实战案例】(五)邮件收发 + 日历日程 + 文件管理一站式搞定

OpenClaw 实现办公自动化核心是模块解耦:邮件收发、文件管理、日历日程各自封装,便于维护和扩展;开发中需重点解决编码兼容、权限配置、时间格式、重复处理四大类坑点,核心思路是 “提前校验 + 异常兜底 + 统一格式”;敏感信息(邮箱密码、API Token)务必通过.env管理,避免硬编码泄露。

qq_36130719的博客 740

解决java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII)[B

今天有人反馈在代码运行时,突然就报出了java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII)[B 异常,经过一番仔细查看,从异常明面上看,是缺少kotlin的包。2.看下自己okhttp包版本,有可能是引入了openfeign,openfeign中自带okhttp3的包,和之前的okhttp包产生了冲突,此时,可以尝试排除。1.此时查看下自己工程,如果没有kotlin包的,直接引入即可,

y6300023290的专栏 3036

激光雷达与相机外参标定(附open3d python代码)

现在的激光雷达与相机的标定程序基本都是Ubuntu框架下面的,并且都是C++代码,需要安装的依赖也比较复杂,于是自己写了一个python版本的标定程序,依赖非常简单,Windows系统也可以运行。我这里用的大疆的雷达,点比较密集,更容易用我这种方法标定,旋转的16,32线的雷达也可以用这种方法标定,只是标定点会相对难选取一些。2 手动在点云上选取N个标定点(每个点都对应图像上的点,顺序也要一致)3 通过PNP方法计算出二者的旋转投影矩阵,也就是外参矩阵。1 手动在图像上面选取N个标定点。

三维点云技术探索 3411

Thinking in Java 17.8 理解Map

简单的map实现 简单过程: 二维数组pairs index 构造器(设置最大长度) put方法 get方法 toString方法 main() 代码实现: package com.example.practicedemo; public class AssociativeArray<K,V> { private Object[][] pairs ; private int...

s_156的博客 131

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

《Thinking in java》-学习笔记(8)

第8章 对象的容纳 1.数组 考虑到执行效率和类型检查,尽可能地采用数组。 2.集合 四种类型:Vector(矢量)、bitset(位集)、Stack(堆栈)、Hashtable(散列表)。 Hashtable是一种关联数组,允许我们将对象关联起来,集合类会自动改变自身的大小。 缺点是:将对象置入一个集合时丢失了类型信息,在使用的时候必须进行造型。 3.枚举器(反复器) 可以利用集...

DeepingC 1459

Statistics and Machine Learning Toolbox

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

thinking in java学习记录(十一)持有对象

11.1 泛型和类型安全的容器 想要定义一个用来保存Apple对象的ArrayList,可以这样声明ArrayList<Apple>,这样通过使用泛型就可以在编译期防止将错误类型的对象放置到容器中 对于放入到容器中的类型,向上转型也可以像用于其他类型一样用于泛型(即泛型接受子类) 11.2 基本概念 java容器类库的作用是用来保存对象,并将其划分为两个不同的概念: 1.Collect...

c630843901的博客 216

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

《Thinking in Java》十七章_容器深入研究_练习13(Page484)

练习13: 单词计数器 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.

CC的云端记事本. 460

thinking in java笔记(上)

notes of thinking in java(上) chapter1 : Introduction to Objects主数据类型(Primitive Type) chapter2 : Everything is an Object用引用操作对象 内存 chapter3 : Operators==和!=比较的是对象的引用,equals()比较的是对象的内容 指数计数:1.39e-43f/47

BBOY Lin 608

持有对象(thinking in Java)

Java中有多种方式保存对象(应该说是对对象的引用)。例如前面曾经学习过的数组,它是编译器支持的类型。数组是保存一组对象最有效的方式,如果你想保存一组基本类型数据,也推荐用这种方式。但是数组具有固定的尺寸,更一般的情况下,你在写程序时并不知道需要多少个对象,或者是否需要更复杂的方式来存储对象,因此数组尺寸固定这一限制显得过于受限了。 Java实用类库还提供了一套相当完整的容器类来解决这个问题,其中...

question_mark的博客 212

《 Thinking in Java 》第十一章 持有对象

Java 有多种方式保存对象(应该说是对象的引用)。 数组 集合类也叫容器 数组是保存一组对象的最有效的方式。 泛型和类型安全的容器 ArrayList 当做“可以自动扩充自身尺寸的数组”。 @SuppressWarnings(“unchecked”) 表示只有有关“不受检查的异常”的警告信息应该被抑制。 原生 ArrayList 也就是没加泛型的,保存的是 Object,因此可以添加所...

努力奋斗 330

《Thinking in Java》读书笔记——第11章 持有对象

目录一.基本概念 一.基本概念 java集合类类库的用途是“保存对象”,并将其划分为两个不同的概念 Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。 Map。一组成对的“键值对”对象,允许你使用键来查找值。ArraList允许你使用数字来查找值,因此在某种意义上讲,它将数字与对象关联在了一起,映射表允许我们使用另一个对象来查找某个对象,它也被成为“关

weixin_48922154的博客 1056

Thinking in Java - 学习笔记 - (十一)持有对象

Java编程思想 - 第十一章 - 持有对象 如果一个程序只包含固定糖耐量的且其生命期都是书籍的对象,那么这是一个非常简单的程序。 通常,程序问题根据运行时才知道的某些条件支创建新对象。在此之前,不会知道所需对象的数量,甚至不知道确切的类型。 数组是保存一组对象的最有效的方式,但是数组具有固定的尺寸,而在更一般的情况中,你在写程序时并不知道将需要多少个对象,或者是否需要更复杂的方式来存储对象...

C.W.WANG的博客 319

java 容器深入研究_Thinking In Java ---- 容器深入研究

1 完整的容器分类法下面是集合类库更加完备的图。包括抽象类和遗留构件(不包括Queue的实现)JavaSE5新添加了:Queue接口及其实现PriorityQueue和各种风格的BlockingQueue;ConcurrentMap接口及其实现ConcurrentHashMap,它们也是用于多线程机制的;CopyOnWriteArrayList和CopyOnWriteArraySet,它们也是用于...

weixin_39683241的博客 170

day11:《Thinking in Java》笔记第十一章---持有对象

集合类(容器)Collection:如List、Set、Queue、Map 一、泛型和类型安全的容器 最基本可靠地容器ArrayList,使用方法:创建一个实例,用add()插入对象,然后用get()访问这些对象,此时需要使用索引,像数组一样,但不需要方括号。 还有一个size()方法,使可知道有多少元素添加进来。 二、基本概念 Collection:一个独立元素的序列,List必须按照

yyjcodemonkey的博客 479

Thinking In Java Part07(容器、简单的容器分类、类加载器)

1、Collection和Iterator Collection是描述所有序列容器的共性的根接口,它可能会被认为是一个“附属接口”,即因为要表示其他若干个接口的共性而出现的接口。AbstractCollection是Collection的默认实现。 使用接口描述的一个理由是它可以使我们能够创建更通用的代码,通过针对接口而非具体实现来编写代码,我们的代码可以应用于更多的对象类型。 2、适配器方法...

civilizationV的博客 219

《Thinking in JAVA》日常笔记整理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34220834的博客 111
下一篇: 【源码分析】HashMap的put(K k,V v)方法
ColdFireMan
博客等级 码龄10年 27粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值