【问题标题】:Java usage of HashMap or Map with multidimensional arraysJava 使用 HashMap 或 Map 与多维数组
【发布时间】:2013-07-18 20:57:33
【问题描述】:

我想使用HashMaps<String, V>,其中值类型V 应该是二维int 数组(int[][])。

Map<String,int[][]> map = new HashMap<>();
int[][] a = new int[][]{ {1, 2} };
map.put("test", a);
System.out.println("Test:" + map.containsKey("test"));  // Test: true
System.out.println("key ==== " + map.get("test"));      // Key === [[I@19a8942

我试图拥有一个访问唯一值的键,即二维数组,数组的大小是固定的array[1][3],这是恒定的。键的数量会随着时间而增长,但数组不会。例如:

Key1 -> [no1, no2, no3]
key2 -> [no4, no5, no6]
  1. 我想访问数组值,现在出现错误。
  2. 有没有更好的方法来实现这一点?理想情况下,我希望它按键排序。

我不是 Java 方面的专家,但在阅读了一些关于地图的内容后,我觉得这对我来说最合适。

【问题讨论】:

  • 你得到什么错误?你做对了。
  • 如果数组的第一个关键维度不会改变,为什么不使用类似 HashMap> 的东西?
  • @GonzaloNaveira。为什么要使用 HashMap 来表示值?
  • 只是因为如果他不使用矩阵,我看不出使用两个数组的意义!

标签: java hashmap treemap sortedmap


【解决方案1】:

我想访问数组值,现在出现错误。

不知道你在这里的意思,但你似乎在正确的轨道上。

System.out.println(map.get("test")[0][1]);
2

理想情况下,我希望它按键排序。

您可以使用TreeMap,它按其键的自然顺序排序。

【讨论】:

  • 感谢您的解决方案也提供了帮助。
【解决方案2】:

您的代码在我运行时不会产生任何错误。但是,您可能会将 java 处理数组字符串表示的方式误解为错误。

当您调用System.out.println("key ==== " + map.get("test")); 时,它确实正确地打印了数组。但是,默认情况下,java 奇怪地表示数组,尤其是数组数组(或 2d 数组)。您可能希望将其更改为:

//at top of file
import java.util.Arrays;

//deepToString returns a string that expresses nested arrays in a user-friendly format
System.out.println("key ==== " + Arrays.deepToString(map.get("test")));

正确打印

Test:true
key ==== [[1, 2]]

【讨论】:

  • Thnx ValekHalfHeart,你说得对,它有效,我不是 java 专家,所以我不知道。
  • @user2575429 如果它解决了您的问题,您可以接受答案。
  • 请不要介意,我接受了另一个答案,因为我想访问这些元素。但你的技术在其他情况下帮助了我。
  • @user2575429 我一点也不介意。您可以选择接受任何您认为可以解决问题的答案。
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 2013-11-28
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多