【问题标题】:How to delete the duplicate data in arraylist java如何删除arraylist java中的重复数据
【发布时间】:2014-04-11 18:44:40
【问题描述】:
public class TestArticles {

public static void handlewords() throws IOException {

    String path = "C:\\Features.txt";
    String path1 = "C:\\train.txt";
    String path2 = "C:\\test.txt";

    File file = new File(path2);
    PrintWriter pw = new PrintWriter(file);


    Features ft = new Features();
    String content = ft.readFile(path);
    String [] words = content.split(" ");

    FileReader fr = new FileReader(path1);  
    BufferedReader br = new BufferedReader(fr);
    String line = null;
    while ((line = br.readLine()) != null) {       
    String [] word = line.split(" ");

    List<String> list1 = new ArrayList<String>(words.length);
    List<String> list2 = new ArrayList<String>(word.length);

   for(String s: words){
       list1.add(s);
       HashSet set = new HashSet(list1);
       list1.clear();
       list1.addAll(set);
    }

     for(String x: word){
        list2.add(x);
        HashSet set = new HashSet(list2);
            list2.clear();
            list2.addAll(set);
    }

   boolean first = true;
   pw.append("{");
    for(String x: list1){
        for(String y: list2){
            if(x.equalsIgnoreCase(y)){
                if(first){
                   first = false; 
                } else {
                    pw.append(",");
                }
              pw.append(list1.indexOf(x) + 39 +" "+ "1");
            }
        }       
    }
       pw.append("}");
       pw.append("\r\n");
       pw.flush();   
    }
     br.close();
     pw.close();

}

我的输出文件类似于:

  1. {23 1,35 1,56 1,56 1,...}
  2. {2 1,4 1,7 1,...}

第一行部分数据重复,第二行所有数据按顺序排列,没有重复数据。我怎样才能删除那些重复的数据?我已经用过hashset,但是没用。

【问题讨论】:

标签: java arraylist hashset


【解决方案1】:

list1list2 中的项目正确地是唯一的,但区分大小写。所以你可能有像manMan这样的项目。但是在你的最后一个循环中你使用x.equalsIgnoreCase(y),因为"man".equalsIgnoreCase("man")"man".equalsIgnoreCase("MAn")都是真的,这就是重复出现的方式。

有几种方法可以解决这个问题:

  • 在构建 list1list2 时,将项目小写
  • 或者,使用TreeSet 代替HashSet,并使用忽略大小写的比较器
  • x.equalsIgnoreCase(y) 更改为x.equals(y)

【讨论】:

  • Janos,它仍然有重复的数据。
  • Janos,我尝试使用 TreeSet,它也有重复的数据。
  • 输入有一个大数据集,第一个输入是wordlist like: 1 word hello... 并逐行显示。另一个输入有几篇文章,例如“我是男人......”“我是女人......”
  • 你可以看到我的代码,我先把数据放到list里,然后把list放到hashset里,最后清空arraylist再把set放到arraylist里。
  • 亚诺斯,你太棒了。它有效,我用 Treeset 代替了 hashset,用 equals 代替了 equasIgnoreCase。非常感谢。
【解决方案2】:

尝试在您的 Hashset 上覆盖 equals,如下所示:

HashSet set = new HashSet(list1){
    public boolean equals(Object o) {
        return this.toString().equals(o.toString());
    };
};

【讨论】:

  • Dan,我想找到一种方法来自动复制数据,而不是查找该字符串。你有什么想法吗?
  • 不理解您的评论..您想删除重复数据,对吗?什么没有按预期工作?
  • 是的,我想删除重复的数据。
猜你喜欢
  • 2015-08-25
  • 2011-01-26
  • 2012-08-25
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多