`
tinyhema
  • 浏览: 150364 次
  • 性别: 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)));
分享到:
评论

相关推荐

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

    List<Map>中英文排序

    支持一个List&lt;Map&gt;按照MAP中的一个或者多个Key的value值的中英文来排序,自动识别字符和数字(包括[a-zA-z]?[0-9]*)排序

    java 面试题 总结

    由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 18、heap和stack有什么区别。 栈是...

    Java面试宝典2020修订版V1.0.1.doc

    31、怎么获取Map所有的key,所有的value 77 32、获取Class的实例有几种方式 77 33、怎么获取类中所有的方法,所有属性 77 34、JDBC常用接口有哪些? 77 35、Statement 中execute、executeUpdate、executeQuery这三者...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...

    springMVC poi解析ajax上传excel文件,返回json对象\list数组

    poi解析excel功能参数说明 ...这个与上面工具类类似,不过这个是解析本地excel文件不是使用的流,使用迭代遍历sheet工作簿与每行每列的值,将所有类型作为String类型处理返回一个json对象输出至控制台

    超级有影响力霸气的Java面试题大全文档

    由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 21、heap和stack有什么区别。  ...

    达内 coreJava 习题答案

    import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print("请输入年份"); int year; //定义输入的年份名字为“year” Scanner scanner = new Scanner(System.in...

    浅谈JsonObject中的key-value数据解析排序问题

    1、JsonObject中的数据是key-value形式,通过JsonObject的keys方法得到key的迭代器是无序的,要想实现排序,目前只能通过加装一层处理(方法来自Stack Overflow,感谢大神),将key-vlaue放入ThreeMap排序,排序规则...

    FreeMark学习笔记

    FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性.下面分别讨论这些情况 1,顶层变量 所谓顶层变量就是直接放在数据...

    Android静默安装常用工具类

    表示从json中读取某个Map类型key的值 源码可见JSONUtils.java,更多方法及更详细参数介绍可见JSONUtils Api Guide。 7、FileUtils 文件工具类,可用于读写文件及对文件进行操作。如: readFile(String filePath) ...

    重载toString实现JS HashMap分析

    Java HashMap的key是Object类型,所以可以任何类型的参数,而JS的key只能是字符串或是数字。 你也许会说,obj={};map[obj]=1;这段代码传入了既不是数字也不是字符的key,但也没发生错误啊。那是因为解释器将obj对象...

    c#源码转java源码的-json11:适用于C++11的微型JSON库

    c#原始码转Java原始码的json11 json11是用于C ++ 11的微型JSON库,提供JSON解析和序列化。 该库提供的核心对象是json11 :: Json。 Json对象代表任何JSON值:null,bool,数字(整数或双精度),字符串(std :: ...

    hadoop-example:hadoop入门例子实践

    MAP阶段:将数据源的VALUE作为key输出,VALUE随意&lt;KEY&gt; REDUCE阶段:因为是去除重复,&lt;KEY&gt;&gt;, 将以上的数据源只保留KEY值进行输出即可。 Sort MAP阶段:将数据进行读取,输出key值为IntWritable,hadoop会对其进行...

    Java学习笔记-个人整理的

    {2.1.2}Java变量类型}{47}{subsection.2.1.2} {2.1.3}面向对象的编程}{47}{subsection.2.1.3} {2.2}继承}{48}{section.2.2} {2.2.1}super(), this()}{49}{subsection.2.2.1} {2.2.2}方法重写/覆盖}{50}{...

    Hibernate注释大全收藏

    @TemporalType.(DATE,TIME,TIMESTAMP) 分别Map java.sql.(Date, Time, Timestamp). @Lob 注解属性将被持久化为 Blog 或 Clob 类型。具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 ...

    Excel POI读取封装(文件+示范代码)

    // 将数据的英文字段作为key,对映值转换为相应类型 datamap.put(e.getColumn(), obj); } } list.add(datamap); } } return list; } /** 将参数转换为数据库数据 */ public Object convertDataType...

    freemarker总结

    [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:”a”,”me”:”b”,”he”:”c”} 注释标志 这里是注释 --&gt; 旧版本的freemarker采用...

Global site tag (gtag.js) - Google Analytics