我应该使用哪个数组/列表来保持静态索引?

时间:2013-10-07 09:46:59

标签: java android arrays

我通常使用HashMap<Integer, Object>来保存一系列对象,您可以通过Integer获取项目。

我告诉你一个例子,你可以理解。

HashMap<Integer,String>

  

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

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

hashmap.remove(0)

  

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

HashMap不应用于Integer的索引。那么...... 我应该使用哪种数组来执行上面解释的操作?

编辑:关于“不应该使用”的部分,这就是Android Eclipse告诉我的内容: enter image description here

6 个答案:

答案 0 :(得分:0)

您可以使用简单的数组。它们可以用整数表示。除了调用remove之外,您可以将null设置为特定位置。如果你真的想调用remove编写自己的包装器方法,那就为你做了。

答案 1 :(得分:0)

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

String arr[] = new String[size]; 

答案 2 :(得分: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;

答案 3 :(得分:0)

您可以使用与<{1}}类似的 SparseArray

HashMap<Integer,String>

答案 4 :(得分:0)

如果您已经知道总大小,那么请使用Arrays。但是,如果你不这样做,那么使用ArrayList。

现在,我没有看到映射的目的。

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

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

答案 5 :(得分:0)

稍微阅读后,我猜答案如下:

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

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

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