`
tinyhema
  • 浏览: 152171 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java map使用数字类型作为key的坑

    博客分类:
  • java
 
阅读更多
看一个例子

import java.util.HashMap;
import java.util.Map;

public class MapTest {
	
	@org.junit.Test
	public void test() {
		Map<Integer, Map<Integer, String>> big = new HashMap<Integer, Map<Integer,String>>();
		for(int i = 0; i < 10; i++) {
			Map<Integer, String> small = new HashMap<Integer, String>();
			small.put(i, String.valueOf(i));
			big.put(i, small);
		}
		System.out.println(big);
		
		long key = 2L;
		System.out.println(big.get(key));
		int k2 = 2;
		System.out.println(big.get(k2));
	}
}


输出如下:
{0={0=0}, 1={1=1}, 2={2=2}, 3={3=3}, 4={4=4}, 5={5=5}, 6={6=6}, 7={7=7}, 8={8=8}, 9={9=9}, 10={10=10}}
null
{2=2}


可以看到,使用long型作为key并不会报错,只是遗憾的取不到数据。

HashMap#get(Obecect obj)方法使用的参数是Object类型,也就是使用任何参数都不会报错,在一般情况下,如果key是复杂对象,写代码时都能注意到。

不巧的是这个case里使用Integer类型作为key,而又用long类型去get,经过装箱后实际上是使用Long作为key查询,自然也就查不到数据。

修改的方式也比较简单,显式的修改参数类型。
System.out.println(big.get(Integer.valueOf(key)));
分享到:
评论

相关推荐

    Google Map Key申请

    在IT行业中,Google Map Key是开发者使用Google Maps API在自己的应用程序中集成谷歌地图服务的关键。本文将详细讲解如何申请Google Map Key,以便于在Android应用中实现地图功能。 首先,你需要确保已经安装了Java...

    解析excel数据转换为Map 支持03和07(xls/xlsx)

    本文将详细讲解如何使用Java编程语言解析Excel数据并将其转换为Map对象,同时支持03版(xls)和07版(xlsx)格式。 首先,解析Excel数据的关键在于使用合适的库。Apache POI 是一个流行的Java API,它允许开发者...

    从格式不确定的json中读取键值对

    在处理JSON数据时,我们经常会遇到格式不一致的情况,这主要源于JSON的灵活性,它可以包含对象、数组、字符串、数字、布尔值以及null等多种数据类型。对于格式不确定的JSON字符串,Java提供了多种库来帮助我们解析,...

    Gson解析JSON中动态未知key的例程源码

    在Java开发中,Gson库是Google提供的一款用于在Java...此外,还可以利用`HashMap`或其他类型的Map将JSON对象映射为Java对象,以适应动态key的场景。这些技术在处理来自服务器或用户输入的不确定结构数据时非常实用。

    Java笔记word.docx

    例如,将`Map`类型转换为`List`类型或使用自定义对象接收复杂的参数。 **示例**: ```java Map, Object&gt; params = new HashMap(); // 转换为List List&lt;String&gt; names = (List) params.get("names"); // 或者使用...

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    - 当值是数字或需要编码的特殊字符时,应先将值转换为字符串并进行URL编码(使用`URLEncoder.encode()`)。 - 如果`Map`中的值是集合类型,可能需要进一步处理,比如对集合内的元素进行排序或合并为单个字符串。 ...

    java处理JSON数据

    在Java编程语言中,处理JSON(JavaScript Object Notation)数据是一项常见的任务,因为JSON作为一种轻量级的数据交换格式,广泛用于API交互、存储和传输数据。本教程将深入探讨Java中处理JSON数据的方法,包括解析...

    麻省理工18年春软件构造课程阅读02-Java基础-1

    在Java中,变量必须先声明再使用,且有固定的类型。例如,整型变量`int b`在不同情况下的赋值: ```java int b; b = 0; // 初始化 b = 2; // 更改值 b = 4; // 再次更改 b *= 3; // 数学操作 ``` 相比之下,Python...

    Java通过Jedis操作Redis

    而Java作为广泛使用的编程语言,通过Jedis库与Redis进行交互,实现了对Redis丰富的操作功能。本文将深入探讨如何使用Java和Jedis来操作Redis,涉及Redis的基本数据类型、主从复制以及事务处理。 首先,让我们了解...

    JS自定义对象实现Java中Map对象功能的方法

    在自定义对象中,我们将使用String类型作为键(key),而值(value)可以是任何类型的数据。 实现这一功能的关键步骤如下: 1. 创建一个自定义对象,该对象包含一个数组属性(_entrys),用于存储键值对数据结构。...

    T9键盘(Java)

    1. **设计UI界面**:使用Java的GUI库(如Swing或JavaFX)创建一个简单的用户界面,包含一个数字键盘布局和一个文本输入框。你可以使用JButton组件表示数字键,并在按钮上显示对应的字母组合。 2. **处理用户事件**...

    基于Java的YAML解析器 SnakeYAML.zip

    **SnakeYAML:Java中的YAML解析库** SnakeYAML是一个用Java编写的开源库...总之,SnakeYAML作为Java环境下的YAML解析器,为开发者提供了一种方便、高效的处理YAML文档的方式,使得在Java项目中使用YAML变得更加简单。

    JAVA竞赛编程题集锦

    以上三道题目展示了Java在数据处理、文件操作以及文本分析方面的能力,涵盖了基础的数据结构(如HashMap)和I/O流的使用,同时也涉及到了简单的算法应用,是Java竞赛编程中常见的类型。通过解决这类问题,可以提升对...

    java电子考勤系统(读CSV文件)

    // 使用逗号作为分隔符 String[] data = line.split(cvsSplitBy); // 处理数据,例如:打印 System.out.println("Employee ID: " + data[0] + ", Date: " + data[1] + ", Time: " + data[2]); } } catch ...

    java 引用 pdf模板

    为了将数据动态插入到模板,通常会结合Java的模板引擎,如FreeMarker或Velocity,这些模板引擎可以将JSON或XML数据转换成字符串,然后将这些字符串作为内容插入到PDF模板。 以下是一段使用iText的示例代码,演示...

    JAVA期末考试试题

    4. 在 Java 中使用 package 关键字来定义包,使用 super 关键字表示父类的引用,使用 static 关键字定义类的静态变量(方法)。 答案:package、super、static 5. 设 x=5,则 a=x- - 和 b= - -x 的结果是 a= 5 和 ...

    Java通用语法面试题

    ### Java通用语法面试题知识点详解 #### 1. Abstract Class 和 Interface 的区别及应用场景 - **Abstract Class**: - 可以包含非抽象方法、构造器、字段。 - 支持单一继承,即一个类只能继承一个抽象类。 - ...

Global site tag (gtag.js) - Google Analytics