2016-05-17 23 views
3

我有150行和10列巨大的表數據,每列都有字符串數據。在存儲數據之後,我還必須遍歷以找到特定的值。所以,在性能和遍歷靈活性方面,我正在尋找這種情況下最佳數據結構的答案。用String數據類型實現2D矩陣的最佳數據結構是什麼?

我想到了Array,ArrayList,Hashmap。

此外,我發現了類似的問題,但他們不回答我的問題。

編輯:數據是字母和整數的混合。不能排序幷包含重複項。

+1

的可能的複製[最快的數據結構包含()在Java中?(http://stackoverflow.com/questions/3267572 /最快數據結構包含在java中) –

+0

你需要多長時間遍歷它?除非你遍歷數千次,否則150 * 10真的沒有什麼大不了的。在這種情況下,您應該更好地指定用例。 –

+0

你必須描述更多 - 需要什麼操作?陣列是遍歷最好的。但是你需要搜索嗎?添加(擴展限制)? – MBo

回答

4

看來那麼這樣的表大小組合2D Array[][] + Hashmap將是一個很好的選擇。簡單而有效。

數組包含值並允許以任何順序遍歷表。

HashMap包含對<String; TPoint>(數組中的座標 - 行/列對)。

如果您只需要知道表中是否包含某些字符串,則不要在Map中存儲座標。

我認爲Guava Table由@krzyk提出,提供類似的功能(不知道性能)

2

番石榴有一個Table結構,看起來像你可以使用它有containsValue(...)方法來找到特定的值,你也可以遍歷它。

這裏的Table的一般explanation

通常情況下,當你在一個時間試圖指數上有多個按鍵,你會風與像Map<FirstName, Map<LastName, Person>>,這是醜陋的尷尬使用。 Guava提供了一個新的集合類型Table,它支持任何「行」類型和「列」類型的這種用例。

你將是最可能感興趣下面執行Table接口:

ArrayTable,這需要的行和列的完整的宇宙,在施工時指定,而是由兩個支持三維數組以提高表格密集時的速度和內存效率。 ArrayTable作品來自有所不同其他實現

1

只是在這種情況下,我會用一個String [] [],因爲你可以訪問與O(1)

的複雜元素,但正如我所說,只有在這種情況下。如果行或列的數量是動態修改的,那麼我會使用List<List<String>>,更確切地說ArrayList

+0

請注意,作者還需要'找到一個特定的值' – MBo

+0

是的,無論哪種方式他可以找到它 使用數組將會是這樣的:array [43] [54] 並使用arraylist會是這樣的:list。 get(43).get(54) – Arctigor

+1

您正在撰寫有關從特定單元格獲取值的文章。找到,如果無序數組包含給定的字符串,一要走過** **所有C * R細胞 – MBo

相關問題