2d数组和hashmap之间的区别

时间:2013-12-31 15:45:30

标签: java

我对Java比较陌生,我只想确保正确理解基本概念。所以我的问题是hashmap与2d数组的不同之处。我将举例说明,如果我错了,有人可以纠正我,那将是很好的。所以

  1. 与hashmap相比,您无法直接访问/更改第2个数组的第1个数组。因此,例如,如果你有arr [2] [5]第一个arr [2]你不能将它改为其他东西。换句话说,如果我们有int arr [2] [2]你不能改变它说arr [汽车] [2]而你可以使用hashmap。你根本无法访问它,而你可以使用hashmap。如果你有地图马丁,25你可以很容易地把它变成乔,22。

  2. 您可以在第一个值的hashmap中轻松搜索。如果你想从上一个例子中找到马丁的年龄,你可以轻松搜索马丁,并且会出现25岁。

  3. 我被教导过2d数组代表一个表。类似的东西。

  4. ARR [2] [3]

    1 [1,2,3]

    2 [1,2,3]

    但实际上你无法在[]网格外访问/更改1和2。这应该只是作为一个想象的帮助来说明2d数组的概念。

    如果我错了,请你纠正我,或者对此作出任何补充评论。

    谢谢

2 个答案:

答案 0 :(得分:6)

哈希映射使用键和值,而不是索引。因此,您只能搜索密钥,因此无法访问任何索引。键必须是唯一的,您不能有两个相同的键,如果您尝试重新分配某些键,旧键的值将被替换。在散列映射中,键可以是任何对象(数组的索引必须是数字)。关键类型作为数组的索引。如前所述,键可以是任何对象,数组的索引必须是int基元。

答案 1 :(得分:3)

就像比较苹果和橘子一样。

2D数组只是对象的二维网格,HashMap是一种特殊的关联数组(也称为字典或映射),它将通用键与通用值相关联。 HashMap不是唯一存在的,例如,TreeMap也存在,它提供大致相同的接口,但实现完全不同。

另一个主要区别是HashMap是为了满足数组中不必要的特定要求:能够存储稀疏键而不会浪费太多空间,同时保持get和set操作的复杂性不变。

这很容易看出:

int[] intMap = new int[10];
HashMap<Integer,Integer> hashIntMap = new HashMap<Integer,Integer>();

现在假设您要插入货币对(500,100)

intMap[500] = 100;
hashIntMap.put(500, 100);

在第一种情况下,你需要在数组中有足够的空间(至少501个元素)才能访问索引500处的单元格。在HashMap中没有这样的要求,因为元素是由使用哈希码并在比所需的单元少得多的单元格中进行布局。