在没有减慢运行时间的情况下,在大量单词中获取多次出现的值的最佳方法是什么?我的文件包含 1xx,xxx字,我将它们放入链接列表中。现在,我想只从该列表中获得多次出现的字样。
例如,如果列表包含:
....This is is is just a test test....
我想获得is
和test
并使用迭代器将它们放入另一个列表中。
我不知道我的代码是否正确,我认为这不是解决此问题的最佳解决方案。
for(int i = 0; i < word.size(); i++) {
Word s = word.get(i);
Word s1 = word.get(i+1);
if(s.equals(s1)) {
newWord.add(s);
}
}
答案 0 :(得分:1)
将它们全部放入HashSet
而不是列表,并检查add()方法的返回值。
HashSet<Word> wordSet = new HashSet<>();
for(int i = 0; i < word.size(); i++) {
if(!wordSet.add(word.get(i)){
//Found duplicate
}
}
请注意,您也可以在/而不是创建单词列表中执行此操作。
答案 1 :(得分:1)
使用单词as key构建hashmap
并将其计为值。
for(each word in list)
{
count = 1;
if(map.contains(word))
{
count = map.get(word);
}
else
count = 1;
map.put(word,count);
}
然后遍历hashmap
并检查值是否为1,并将该词添加到列表中。
答案 2 :(得分:0)
如果您可以对列表进行排序,则可以快速轻松地查找重复项。