java如何将2d数组的条目作为键放在地图中
有一个包含集合的2d数组,我想把它作为键放在地图上。请,有人,建议如何正确地做。预期和实际产出见下文
public class trysome
{
static int[][] points = {{1,2}, {1,1},{5,7}};
public static void some()
{
HashMap<int[], Integer> map= new HashMap<int[], Integer>();
for(int i =0;i<points.length;i++)
{
map.put(points[i], 1);
}
for(Entry<int[], Integer> entry : map.entrySet())
{
System.out.println(entry.getKey() + " "+entry.getValue());
}
}
public static void main(String[] args)
{
trysome.some();
}
}
Actual Output:
[I@16b4a017 1
[I@8807e25 1
[I@2a3046da 1
Expected Output:
{1,2} 1
{1,1} 1
{5,7} 1
# 1 楼答案
试试这个:
输出(例如):
或者,如果您希望精确到预期输出:
# 2 楼答案
您正在观察的输出的原因在What's the simplest way to print a Java array?中解释。底线是:输出
[I@16b4a017
基本上是数组的“内存位置”,而不是数组的内容我之所以不将此作为重复关闭,是因为这里的输出只是一个更大缺陷的无关症状:您的方法在概念上是错误的
不能将
int[]
数组用作基于哈希的数据结构中的键强>有人可能会争辩说,如果依赖于数组的标识,它会起作用。但事实很少如此
原因是
equals
和hashCode
方法在数组上的实现方式与此工作所需的方式不同。省略一些可以在别处阅读的技术细节如果您的代码应该处理平面中的二维点,那么您应该使用适当的类来表示这些点。然后,这个类可以包括
hashCode
、equals
和toString
的正确实现幸运的是,Java标准API中已经有这样一个类,即^{}
下面显示了原始实现在
usingArraysAsKeys
方法中无法按预期工作的原因,以及如何在usingPointsAsKeys
方法中正确实现它:使用} 方法,允许您计算一个点到另一个点的距离:
Point
类的另一个优点是它已经有了几种方便的方法-最重要的是,一种^{(顺便说一下:如果地图应该存储距离,那么它的值类型应该是
Double
,而不是Integer
)# 3 楼答案
此方法可以帮助您:
您可以这样使用它:
此解决方案的好处是,您可以根据需要对其进行自定义