我有150行和10列巨大的表數據,每列都有字符串數據。在存儲數據之後,我還必須遍歷以找到特定的值。所以,在性能和遍歷靈活性方面,我正在尋找這種情況下最佳數據結構的答案。用String數據類型實現2D矩陣的最佳數據結構是什麼?
我想到了Array,ArrayList,Hashmap。
此外,我發現了類似的問題,但他們不回答我的問題。
編輯:數據是字母和整數的混合。不能排序幷包含重複項。
我有150行和10列巨大的表數據,每列都有字符串數據。在存儲數據之後,我還必須遍歷以找到特定的值。所以,在性能和遍歷靈活性方面,我正在尋找這種情況下最佳數據結構的答案。用String數據類型實現2D矩陣的最佳數據結構是什麼?
我想到了Array,ArrayList,Hashmap。
此外,我發現了類似的問題,但他們不回答我的問題。
編輯:數據是字母和整數的混合。不能排序幷包含重複項。
看來那麼這樣的表大小組合2D Array[][] + Hashmap
將是一個很好的選擇。簡單而有效。
數組包含值並允許以任何順序遍歷表。
HashMap包含對<String; TPoint>
(數組中的座標 - 行/列對)。
如果您只需要知道表中是否包含某些字符串,則不要在Map中存儲座標。
我認爲Guava Table
由@krzyk提出,提供類似的功能(不知道性能)
番石榴有一個Table
結構,看起來像你可以使用它有containsValue(...)
方法來找到特定的值,你也可以遍歷它。
這裏的Table
的一般explanation:
通常情況下,當你在一個時間試圖指數上有多個按鍵,你會風與像
Map<FirstName, Map<LastName, Person>>
,這是醜陋的尷尬使用。 Guava提供了一個新的集合類型Table,它支持任何「行」類型和「列」類型的這種用例。
你將是最可能感興趣下面執行Table
接口:
ArrayTable
,這需要的行和列的完整的宇宙,在施工時指定,而是由兩個支持三維數組以提高表格密集時的速度和內存效率。ArrayTable
作品來自有所不同其他實現
只是在這種情況下,我會用一個String [] [],因爲你可以訪問與O(1)
的複雜元素,但正如我所說,只有在這種情況下。如果行或列的數量是動態修改的,那麼我會使用List<List<String>>
,更確切地說ArrayList
的可能的複製[最快的數據結構包含()在Java中?(http://stackoverflow.com/questions/3267572 /最快數據結構包含在java中) –
你需要多長時間遍歷它?除非你遍歷數千次,否則150 * 10真的沒有什麼大不了的。在這種情況下,您應該更好地指定用例。 –
你必須描述更多 - 需要什麼操作?陣列是遍歷最好的。但是你需要搜索嗎?添加(擴展限制)? – MBo