什么有效的 Java 集合将用于存储一百万个字符串?

Var*_*unJ 1 java collections

是否有任何需要使用的特定 API?有人可以发布它是如何实现的。

任何建议将不胜感激。

Sub*_*der 5

这将取决于您的要求,哪个集合是合适的,如果它是 String 列表然后使用,java.util.List或者它是 String 集然后使用,java.util.Set或者它也是键值对然后使用Map

每个接口的实现也特定于需求。

当您谈论数据量时,它有两件事:

  1. 表现
  2. 记忆。

谈性能如果是 ArrayList - add 操作在摊销常数时间内运行,即添加 n 个元素需要O(n)时间。所有其他操作都在线性时间内运行(粗略地说)。与LinkedList实现相比,常数因子较低。

在这种情况下,HashSet它也为基本操作 ( add, remove, contains and size)提供恒定的时间性能,假设散列函数在桶中正确地分散元素。

HashMapO(1)基本操作 ( get and put)提供恒定时间性能。

如果大集合耗尽内存,则谈论内存,这意味着如果您获得OutOfMemoryExcaption. 然后你必须通过传递来增加你的堆空间-Xmxn

-Xmx n
指定内存分配池的最大大小(以字节为单位)。该值必须是大于 2MB 的 1024 的倍数。附加字母 k 或 K 以指示千字节,或附加字母 m 或 M 以指示兆字节。默认值为 64MB。此值的上限在 Solaris 7 和 Solaris 8 SPARC 平台上约为 4000m,在 Solaris 2.6 和 x86 平台上约为 2000m,减去开销量。像 -Xmx2048m