Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该使用哪个数组/列表来保存静态索引?_Java_Android_Arrays - Fatal编程技术网

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");