我是靠谱客的博主 虚幻可乐,最近开发中收集的这篇文章主要介绍java map key 数组_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 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的用法 | 学步园所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部