使用哈希集识别文本文件中的重复数字

时间:2012-01-07 17:49:57

标签: java hashset

这里我编写的代码显示了文本文件中的重复数字。这里我假设文本文件每行只包含整数。正如您现在所看到的,它在文本文件中显示重复的整数。

我硬编码了文本文件的路径名。

这里我使用了两个哈希集来实现它。我只能使用一个哈希集吗?你能告诉我如何只使用一个哈希集来实现它吗?

import java.io.*;
import java.util.*;

public class FileRead {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    HashSet <String> uniquelines=new HashSet<String>();
    HashSet<String>duplicatelines=new HashSet<String>();


    try{
        FileInputStream fstream=new FileInputStream("C:/Users/LENOVO/Desktop/txt.txt");
        DataInputStream in=new DataInputStream(fstream);
        BufferedReader br=new BufferedReader(new InputStreamReader(in));
        ArrayList arr=new ArrayList();
        String str;
        while((str=br.readLine())!=null){
            if(uniquelines.contains(str)){
                if(!duplicatelines.contains(str)){
                    duplicatelines.add(str);
                    System.out.println(str);
                }
            }
            else{
                uniquelines.add(str);
            }
        }
        in.close();
    }catch(Exception e){
        System.out.println(e);
    }

}

}

2 个答案:

答案 0 :(得分:3)

为了保留现有功能,我看不出你如何使用单个HashSet。但是,您可以使用单个HashMap,其中键是行,而值将是文件中行的出现次数。

附注:

  • 溪流,读者和作家应始终在最后一个街区中关闭。
  • 您的arr变量无效。

答案 1 :(得分:1)

你不需要检查uniquelines是否已经包含该字符串,只需添加它... hashset本身将进行检查,并且不允许重复。 请参阅下面的代码......

如果您不关心多次打印重复项,不仅一次(也许您只是打印它进行测试?),您不需要在下面的代码中设置重复项....但是如果如果你没有跟踪你之前发现的重复项,那么你就无法做到这一点,所以是的,你需要这两套......

    public static void main(String[] args) {
    HashSet <String> uniquelines=new HashSet<String>();
    Set <String> duplicates=new HashSet<String>();
    BufferedReader br = null;
    try{
        FileInputStream fstream=new FileInputStream("C:/Users/LENOVO/Desktop/txt.txt");
        DataInputStream in=new DataInputStream(fstream);
        br=new BufferedReader(new InputStreamReader(in));
        String str;
        while((str=br.readLine())!=null){
            boolean duplicate = !uniquelines.add(str);
            if (duplicate) {
                if (!duplicates.contains(str)) {
                    System.out.println(str);
                    duplicates.add(str);
                }
            }
        }
    } catch(Exception e) {
        System.out.println(e);
    } finally {
        try {
            br.close();
        } catch(Exception e2) { }
    }

}