我通常使用HashMap<Integer, Object>
来保存一系列对象,您可以通过Integer
获取项目。
我告诉你一个例子,你可以理解。
HashMap<Integer,String>
:
[0] - 你好 1 - 你好吗 [2] - 再见
因此,使用HashMap,我可以删除项目,避免其余部分从索引中移动。
hashmap.remove(0)
[0] - null
1 - 你好吗 [2] - 再见
但HashMap
不应用于Integer
的索引。那么...... 我应该使用哪种数组来执行上面解释的操作?
编辑:关于“不应该使用”的部分,这就是Android Eclipse告诉我的内容:
答案 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,因为它更有效。