Java 我应该使用哪个数组/列表来保存静态索引?
我通常使用Java 我应该使用哪个数组/列表来保存静态索引?,java,android,arrays,Java,Android,Arrays,我通常使用HashMap保存一个对象数组,您可以通过Integer获取项目 我给你举个例子,让你明白 HashMap: [0]-你好 -你好吗 [2] -再见 因此,使用HashMap,我可以删除项目,避免其他项目从它们的索引中移动 hashmap.remove(0) [0]-null -你好吗 [2] -再见 但是HashMap不应用于带有整数的索引。所以我应该使用哪种数组来执行我上面解释的操作? 编辑:关于“不应该使用”部分,这是Android Eclipse告诉我的: 您可以使用一个简单的
HashMap
保存一个对象数组,您可以通过Integer
获取项目
我给你举个例子,让你明白
HashMap
:
[0]-你好-你好吗
[2] -再见 因此,使用HashMap,我可以删除项目,避免其他项目从它们的索引中移动
hashmap.remove(0)
[0]-null-你好吗
[2] -再见 但是
HashMap
不应用于带有整数的索引。所以我应该使用哪种数组来执行我上面解释的操作?
编辑:关于“不应该使用”部分,这是Android Eclipse告诉我的:
您可以使用一个简单的数组。它们可以用整数表示。除了调用remove,您还可以将null设置为特定位置。如果您真的想调用remove,请编写您自己的包装器方法,它可以为您实现这一点。实际上,您可以使用一个简单的字符串数组
String arr[] = new String[size];
如果索引密集(在[0..n]范围内没有大洞),最有效的方法是使用字符串的普通数组:
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;
您可以使用类似于HashMap的SparseArray
SparseArray arr=新SparseArray();
arr.put(0,“你好”);
如果您已经知道总大小,则使用数组。如果您不知道,则使用ArrayList
现在,我看不出映射的目的
Hashmap是一种映射数据结构。与列表类似,Hashmap中存储的每个项都存储在特定的索引中。此索引称为哈希,使用哈希函数生成。哈希函数接受要存储的对象作为参数,并生成一个唯一的数字。不同的哈希函数有不同的权衡。过于稀疏的函数将占用比所需空间更多的空间(在您的情况下)。而不够稀疏的函数将在对象使用相同哈希时发生冲突
如果感兴趣,请进一步阅读:看看Android的SparseArray实现,以获得灵感。
在此处下载AOSP的源代码以查看源代码。
它针对整数进行了高度优化!读了一点之后,我想答案如下:
1.-我不能使用普通数组。原因:我可能不知道它的最终大小
2.-列表不适合,因为当您删除项目时,以下项目适合新索引。我不希望索引移动
因此,作为一个全局答案,使用HashMap是可以的,但是建议使用SparseArray,因为它更有效。“但是HashMap不应该用于带有整数的索引。”为什么?您的前半部分是后半部分的答案。这两部分是互斥的:)hasMap.size()返回int.@R.id.pandacoder So.@R.id.pandacoder为什么突然size
介于两者之间?对我来说不可能,因为我不知道大小。请改用ArrayList。如果我执行remove(index)
数组中的下一项,将移回1个位置,正如问题所述,这是我不想实现的。
SparseArray<String> arr=new SparseArray<String>();
arr.put(0, "Hello");