2d数组和hashmap之间的区别

use*_*650 3 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数组代表一个表.就像是.

ARR [2] [3]

1 [1,2,3]

2 [1,2,3]

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

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

谢谢

Mar*_*vdv 6

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


Jac*_*ack 5

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

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

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

这很容易看出:

int[] intMap = new int[10];
HashMap<Integer,Integer> hashIntMap = new HashMap<Integer,Integer>();
Run Code Online (Sandbox Code Playgroud)

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

intMap[500] = 100;
hashIntMap.put(500, 100);
Run Code Online (Sandbox Code Playgroud)

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