2012-11-30 39 views
0

是否有任何特定的API需要使用?有人可以發佈如何實施。將使用什麼高效的Java集合來存儲一百萬個字符串?

任何建議將深受讚賞。

+4

您需要提供更多信息。你想用字符串做什麼?是否會有很多插入,刪除,迭代和搜索? – Keppil

+0

除了@ Keppil的問題之外,字符串還有多長? –

+0

你爲什麼要在內存中加載百萬條記錄?考慮以塊加載它們,然後你可以使用List/Set collection api。 –

回答

3

這將取決於你的需求,其收藏將是合適的,如果是字符串的列表,然後使用java.util.List,或者如果它被設置爲String,然後使用java.util.Set,或者也鍵值對,然後使用Map

並且每個接口的實現也具體要求。

當你在談論的數據量,然後它帶有兩件事情:

  1. 性能
  2. 內存。

如果是ArrayList,則說明性能 - add操作以攤銷常量時間運行,即添加n個元素需要O(n)時間。所有其他操作在線性時間內運行(粗略地說)。與LinkedList實現相比,常數因子較低。

如果是HashSet,它還爲基本操作(add, remove, contains and size)提供恆定的時間性能,假設散列函數在桶之間正確分散元素。

HashMap爲基本操作(get and put)提供了恆定時間性能O(1)

並且如果大量收集耗盡內存,這意味着如果您得到OutOfMemoryExcaption,則說說內存。然後你必須通過-Xmxn來增加你的堆空間。

-XmxÑ
指定的最大大小,以字節爲單位,分配的內存池。該值必須是大於2MB的1024的倍數。附加字母k或K表示千字節,或者m或M表示兆字節。默認值是64MB。在Solaris 7和Solaris 8 SPARC平臺上此值的上限約爲4000米,在Solaris 2.6和x86平臺上約爲2000米,減去開銷量。像-Xmx2048m

+0

良好的答覆,此外,如果有重複的字符串使用'String.intern()'來保存內存。兩個內容相同的字符串共享內存。 – akuhn

1

沒有關於上下文和頻繁操作的更多信息,似乎最好使用簡單的字符串數組或嵌入式Java DB。

相關問題