gpt4 book ai didi

java - 在大文件Java中查找重复的行

转载 作者:行者123 更新时间:2023-11-29 07:48:41 26 4
gpt4 key购买 nike

所以,我有一个包含 300 万行单词的大文件。我需要查看是否有任何重复项。

我将线放在 TreeMap 中以便对它们进行排序,将“线”放入键中并将“1”赋给它们的值。当有重复时,该行的值叠加。然后我将不得不看看是否有任何不是 1 的值。

这是我的代码:

    BufferedReader list = new BufferedReader( new FileReader( args[0] ) );
String line;
TreeMap<String,Integer> map = new TreeMap<String,Integer>();

while ( (line = list.readLine()) != null )
{
if (!map.containsKey(line))
{
map.put(line, 0);
}
map.put(line, map.get(line) + 1);
}

if ( !map.containsKey(1) )
{
System.out.print("NOT UNIQUE");
}
else
{
System.out.print("UNIQUE");
}
list.close();
}

问题:

  1. 使用 TreeMap 会加快这个过程吗?或者使用 HashMap 会有相同/更快的速度?

  2. 输出:

    线程“main”中的异常 java.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Integer
    在 java.lang.Integer.compareTo(Integer.java:52)
    在 java.util.TreeMap.getEntry(TreeMap.java:346)
    在 java.util.TreeMap.containsKey(TreeMap.java:227)
    在 Lab10.main(Lab10.java:22)

这是 if ( !map.containsKey(1) ),但我不知道出了什么问题。

最佳答案

最有效的实现实际上取决于您的要求。

根据您所写:所以,我有一个包含 300 万行单词的大文件。我需要查看是否有任何重复项。,我假设您只是想检查是否有重复行。

在这种情况下,您无需计算有多少重复项,使用 HashSet 和旧的、良好的字符串哈希函数可能就足够了(甚至更好)。

例子如下:

boolean hasDuplicate = false;
Set<String> lines = new HashSet<String>();
while ( (line = list.readLine()) != null && !hasDuplicate )
{
if (lines.contains(line)) {
hasDuplicate = true;
}
lines.add(line);
}

if (hasDuplicate){
System.out.print("NOT UNIQUE");
} else {
System.out.print("UNIQUE");
}
list.close();
}

关于java - 在大文件Java中查找重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175236/

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