从数组中选择前10个最常出现的字符串java

时间:2013-03-07 22:34:35

标签: java string performance algorithm search

我有一个字符串数组,我想从中找到前10个最常出现的字符串。

这样做的一种原始方法当然是遍历数组一次,得到所有不同字符串的堆栈/队列,将这些不同的字符串存储在一个数组中,然后检查这个新数组中每个字符串的次数发生在原始数组中,最后将值存储在'n'个不同的整数中,其中n是不同字符串的数量。

显然,在时间效率方面,这是一种可怕的方法,所以我想知道是否有更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:4)

如果您不关心内存,可以构建一个包含每个字符串计数的哈希映射:遍历所有字符串以及每个字符串

myhash[mystring] += 1

如果字符串已经存在于哈希中,或者

myhash[mystring] = 1

否则。

如果你认为在一个哈希映射中查找一个值是在恒定时间内进行的(这可能不是真的)那么这个算法只是“{”O(n)(但它占用了大量的内存)。

答案 1 :(得分:2)

如果您关心内存,可以对数组进行排序,然后计算每个字符串容易出现的次数(每个字符串首先出现在位置i,i + 1,i + 2,...,i + k和在其他地方)。

排序将采用O(n log n),而不是O(n)来计算字符串的出现次数。

答案 2 :(得分:1)

您可以使用Guava Multiset添加所有字符串,然后仅查看前10个<{1}}

请参阅this question以获取示例