概述
这个是今天我的个人经历,作为经验教训,鄙视自己一下。
先说下问题,在网上查了下,我用的是ConCurrentMap接口来作为引用,创建的ConCurrentHashMap做键值对的处理,这个不是主要的,主要的是Map中使用的数组Key。
通过一下一段代码来说明一下我的问题所在吧:
package com.test;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
public class TestMap {
/**
* @param args
*/
public static void main(String[] args) {
ConcurrentMap map = new ConcurrentHashMap();
String[] str1 = {"1", "001"};
String[] str2 = {"2", "002"};
map.put(str1, "1001");
map.put(str2, "2002");
String[] str3 = {"1", "001"};
System.out.println(map.get(str3));
}
}
以Map为说明,我在map中put了两个值,泛型中分别是以String数组为key,String为value。
分别是以str1和str2作为引用,然后我在get的时候,想通过同样的key数组来调用str1的值,但是始终是null。
基础不扎实的我搞这个竟然搞了一天,真是惭愧。
最终经人提醒,才发现了Map在进行put的时候,如果key作为以数组或其他非字符串为键的时候,
java内部是视为其Object类型的,因此put到内存中的时候,它存在于一个具体的地址。
用debug来调试的话,显示为如下内容:
{[Ljava.lang.String;@1006d75=1001, [Ljava.lang.String;@1125127=2002}
因此当指定一个相同的字符串数组的时候,也不会找到上述对应的value,因为你给予的str3,在内存中的地址根本就是不存在的。
具体解决的办法,可以通过map的keySet方法,并获得你的iterator方法,在遍历循环中找到你的信息,即你传递的两个数组来判断匹配是否等于之前put进去的值,最终来取到这个值。
不知道本人有没有叙述明白,如有问题,请高手看到给你纠正,谢谢。
最后
以上就是虚幻可乐为你收集整理的java map key 数组_Map中使用数组作为key的用法 | 学步园的全部内容,希望文章能够帮你解决java map key 数组_Map中使用数组作为key的用法 | 学步园所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复