2013-10-07 51 views
1

我通常使用HashMap<Integer, Object>來保存一組對象,您可以通過Integer獲得項目。應該使用哪個數組/列表來保持靜態索引?

我向你展示了一個例子,以便你能理解。

HashMap<Integer,String>

[0] - 你好
1 - 你怎麼樣
[2] - 再見

因此,與一個HashMap,我可以刪除項目避免從他們的指數休息。

hashmap.remove(0)

[0] - 空
1 - 你怎麼樣
[2] - 再見

HashMap不應該被用於與Integer索引。所以... 我應該使用哪種數組來執行類似我上面解釋的操作?

編輯:關於「不應該使用」的部分,這就是Android的Eclipse的告訴我: enter image description here

+3

「但是HashMap不應該用於帶有Integer的索引。」爲什麼? – zch

+0

你的上半場是下半場的回答。這兩個部分是互斥的:) –

+0

hasMap.size()返回int。 – 2013-10-07 09:51:28

回答

0

您可以使用一個簡單的數組。它們可以用整數指向。除了調用remove之外,您可以將null設置爲特定的地方。如果你真的想要去除寫你自己的包裝方法,它爲你做。

0

其實,你可以使用一個簡單的字符串數組。

String arr[] = new String[size]; 
+0

對我來說不可能,因爲我不知道大小。 – Reinherd

+0

改爲使用ArrayList 。 – xiriusly

+0

如果我執行'刪除(索引)'數組中的下一個項目,將被移回1個位置,並且如問題所述,這是我不想實現的。 – Reinherd

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; 
0

您可以使用SparseArray這類似於HashMap<Integer,String>

SparseArray<String> arr=new SparseArray<String>(); 
    arr.put(0, "Hello"); 
0

如果你已經知道總的大小,然後用陣列去了。但是如果你不然後去無線th ArrayList。

現在,我沒有看到在這裏映射的目的。

Hashmap是一個Map數據結構。像列表一樣,存儲在散列映射中的每個項目都存儲在特定的索引處。該索引稱爲散列,並使用散列函數生成。散列函數接受要存儲的對象作爲參數並生成一個唯一的數字。不同的哈希函數有不同的權衡。一個太稀疏的函數會佔用比需要更多的空間(你的情況)。而一個不夠稀疏的將遭受碰撞,其中對象使用相同的散列。

進一步閱讀如果感興趣:請看Android的SparseArray實現以獲取靈感。 查看源代碼下載AOSP的源代碼在這裏http://source.android.com/source/downloading.html。 它是高度優化的整數!

0

讀一點點,我想答案是:

1 .-我不能使用普通的數組。原因:我可能不知道它的最終大小。

2.-列表不適合,因爲當您刪除一個項目時,以下項目適合新的索引。我不想索引移動。

因此,作爲一個全局答案,使用HashMap是可以的,但建議使用SparseArray,因爲它更高效。