【问题标题】:Use map to check whether contains the array. But does not work使用 map 检查是否包含数组。但不起作用
【发布时间】:2012-01-15 14:52:40
【问题描述】:

我有一个关于 Java 地图的问题。我使用map来包含数组,我想检查map是否包含我想要的数组。但它不起作用。无论如何要检查地图是否包含我想要的数组?

import java.util.*;

 public class testContainKey{
 static Map<int[],Integer> map = new HashMap<int[], Integer>(); 
  public static void main(String args[]){
   int[] initial={1,2,3,4,5,6,7,8,9};
   int[] goal = {1,2,3,4,5,6,7,8,9};
   map.put(goal,0);
   if(map.containsKey(array)){
    System.out.println("OK");
  }
   else{
     System.out.println("Not works");
   }
 }
}

【问题讨论】:

标签: java arrays map


【解决方案1】:

当您调用Map.containsKey() 时,它使用的是数组的.equals(),它比较两个对象。由于 initial 和 goal 是 2 个不同的数组,initial.equals(goal) 将始终为 false,即使数组的内容相同。

您可以做的事情是扩展 Map 并覆盖 Map.containsKey() 以检查 int[],并比较每个元素以确定相等性。

【讨论】:

  • 他在比较目标,他从不将初始数组放在地图中
【解决方案2】:

您正在使用数组作为映射的键,这很难控制,因为 AFAIK 您无法修改其中的 equals()hashCode()

【讨论】:

    【解决方案3】:

    这是行不通的:Map 基于哈希码和相等检查;数组在计算其哈希码时不注意其元素。这就是为什么您尝试用作键的两个数组被视为不同的原因。

    您可以定义一个类ArrayKey,在构造函数中将数组放入其中,并定义使用数组元素的equalshashCode

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2019-08-10
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多