1

我通常HashMap<Integer, Object>用来保存一组对象,您可以在其中获取项目Integer

我给你看一个例子,这样你就可以理解了。

HashMap<Integer,String>

[0] - 你好
1 - 你好吗
[2] - 再见

因此,使用 HashMap,我可以删除项目,避免其余项目从索引中移动

hashmap.remove(0)

[0] - null
1 - 你好吗
[2] - 再见

HashMap不应用于带有Integer. 所以......我应该使用哪种数组来执行我上面解释的操作?

编辑:关于“不应该使用”的部分,这是 Android Eclipse 告诉我的: 在此处输入图像描述

4

6 回答 6

0

您可以使用一个简单的数组。它们可以用整数指向。除了调用 remove 之外,您还可以将 null 设置为特定位置。如果您真的想调用 remove,请编写您自己的包装器方法来为您执行此操作。

于 2013-10-07T09:51:34.457 回答
0

看了一点点,我猜答案如下:

1.- 我不能使用普通数组。原因:我可能不知道它的最终尺寸。

2.- 列表不适合,因为当您删除一个项目时,以下项目适合新索引。我不希望索引移动。

因此,作为一个全局答案,使用 HashMap 是可以的,但是建议使用 SparseArray,因为它更有效。

于 2013-10-07T10:06:41.513 回答
0

您可以使用类似于HashMap<Integer,String>

SparseArray<String> arr=new SparseArray<String>();
    arr.put(0, "Hello");
于 2013-10-07T10:00:51.517 回答
0

如果您已经知道总大小,请使用数组。但是,如果您不这样做,请使用 ArrayList。

现在,我在这里看不到映射的目的。

Hashmap 是一种 Map 数据结构。像列表一样,存储在哈希图中的每个项目都存储在特定索引处。该索引称为散列,它是使用散列函数生成的。哈希函数接受要存储的对象作为参数并生成一个唯一的数字。不同的散列函数有不同的权衡。太稀疏的函数将占用比所需空间更多的空间(您的情况)。而一个不够稀疏的将遭受对象使用相同哈希的冲突。

感兴趣的进一步阅读:查看 Android 的 SparseArray 实现以获得灵感。通过在http://source.android.com/source/downloading.html下载 AOSP 的源代码来查看源代码。它针对整数进行了高度优化!

于 2013-10-07T10:00:57.470 回答
0

实际上,您可以使用一个简单的字符串数组。

String arr[] = new String[size]; 
于 2013-10-07T09:53:02.630 回答
0

我你的索引很密集(在 [0..n] 范围内没有大洞,最有效的方法是使用一个简单的数组String

final String[] lup = new String[3];
lup[0] = "Hello";
lup[1] = "How are you doing";
lup[2] = "Bye";

// to remove elements just set the index to `null`:
lup[0] = null;
于 2013-10-07T09:53:16.760 回答