Java中如何打印存储在HashMap中的二维数组键值对?
问题解决:正确打印HashMap中数组类型的键值对
你看到的[Ljava.lang.String;@372f7a8d这类输出,是因为Java数组默认的toString()方法不会输出数组内容,而是返回数组的类型标识与内存哈希值。要正确打印数组元素,需借助java.util.Arrays类的工具方法。
修改后的打印代码
import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { String[][] myExampleArray = {{"string1", "string2", "string100"}, {"string1", "string2", "string100"}}; HashMap<String[], String[]> mappedArrays = new HashMap<>(); mappedArrays.put(myExampleArray[0], myExampleArray[1]); for (Map.Entry<String[], String[]> entry : mappedArrays.entrySet()) { // 用Arrays.toString()将数组转为可读字符串 String keyStr = Arrays.toString(entry.getKey()); String valueStr = Arrays.toString(entry.getValue()); System.out.println(keyStr + " ==== " + valueStr); } } }
执行后会输出类似结果:
[string1, string2, string100] ==== [string1, string2, string100]
额外提醒:数组作为HashMap键的隐患
Java数组的equals()和hashCode()方法是基于对象引用实现的,而非数组内容。这意味着即便你创建一个内容完全相同的新数组,用它调用mappedArrays.get(newKeyArray)也无法获取对应值——因为两个数组的引用地址不同。如果需要基于内容匹配HashMap的键,建议改用List<String>替代数组,ArrayList等集合类的equals()和hashCode()是基于内容实现的。
内容的提问来源于stack exchange,提问作者Mackyboy
相关产品推荐
相关产品推荐

