Map中使用数组作为key的用法

这个是今天我的个人经历,作为经验教训,鄙视自己一下。

先说下问题,在网上查了下,我用的是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<String[], String> map = new ConcurrentHashMap<String[], String>();
		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进去的值,最终来取到这个值。

不知道本人有没有叙述明白,如有问题,请高手看到给你纠正,谢谢。



你可能感兴趣的:(Map中使用数组作为key的用法)