gpt4 book ai didi

java - 识别包含 300k+ 字符串的列表中的重复元素

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:49:53 26 4
gpt4 key购买 nike

我有一个包含 305899 个字符串的列表(这是一个网站的用户名)。在我删除所有重复项后,数字下降到 172123 个字符串。

我想找出特定字符串(用户名)在该 ArrayList 中重复了多少次。我写了一个简单的冒泡排序类型的逻辑,但它太慢了。

private static Map<String, Integer> findNumberOfPosts(List<String> userNameList) {
Map<String, Integer> numberOfPosts = new HashMap<String, Integer>();
int duplicate = 0;
int size = userNameList.size();
for (int i = 0; i < size - 1; i++) {
duplicate = 0;
for (int j = i + 1; j < size; j++) {
if (userNameList.get(i).equals(userNameList.get(j))) {
duplicate++;
userNameList.remove(j);
j--;
size--;

}
}
numberOfPosts.put(userNameList.get(i), duplicate);
}

return numberOfPosts;
}

然后我改成这样:

private static Map<String, Integer> findNumberOfPosts(List<String> userNameList) {
Map<String, Integer> numberOfPosts = new HashMap<String, Integer>();

Set<String> unique = new HashSet<String>(userNameList);

for (String key : unique) {
numberOfPosts.put(key, Collections.frequency(userNameList, key));
}

return numberOfPosts;
}

这也真的很慢。当我的意思是慢时,完成列表需要 30 多分钟。

有没有其他有效的方法来处理这个问题?只是减少查找和计算重复元素所需的时间?

最佳答案

您的findNumberOfPosts 方法是在正确的轨道上,但您的实现正在做大量不必要的工作。
试试这个:

private static Map<String, Integer> findNumberOfPosts(List<String> userNameList) {
Map<String, Integer> numberOfPosts = new HashMap<String, Integer>();

for (String userName : userNameList) {
Integer count = numberOfPosts.get(userName);
numberOfPosts.put(userName, count == null ? 1 : ++count);
}
return numberOfPosts;
}

这在大多数机器上应该会在几秒钟内执行。

关于java - 识别包含 300k+ 字符串的列表中的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8799048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com