HashSet Java中的重复元素

时间:2015-01-30 02:40:20

标签: java duplicates hashset duplicate-removal

我正在创建一个抓取.edu域的网络抓取工具。我正在使用jsoup来解析我的html文件以获取锚链接。然后我将链接添加到HashSet,因为我不想有重复的URL。但是,当我打印出我的HashSet时,我有几个url的重复。

我将我的集合声明为成员函数

private Set <String> url = new HashSet<String>();

public void jsoupParse(String htmlFile, String baseUrl){
    try{
        File input = new File(htmlFile);
        Document doc = Jsoup.parse(input, "UTF-8", baseUrl);
        Elements links = doc.select("a[href]");
        for (Element link : links) {
            String linkHref = link.attr("abs:href");
            linkHref.trim();
            url.add(linkHref);
        }
        printCollection();
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

在我的种子文件中,我有4个网址,所以我有4个html文件。当我打印出来时,我得到了659个条目。下面是我的输出样本。例如,此特定URL将打印出四次。 http://diversity.mit.edu/diversity-summit-2015/

我的输出:

http://web.mit.edu/admissions/
http://diversity.mit.edu/
http://newsoffice.mit.edu
http://whereis.mit.edu
http://diversity.mit.edu/diversity-summit-2015/
http://diversity.mit.edu/event/mlk-celebration-2015/
http://mit.edu/site/?ref=mithomepage
http://ki.mit.edu
http://web.mit.edu/athletics/www/
http://twitter.com/mit
http://libraries.mit.edu/
http://web.mit.edu/faculty/
....
http://newsoffice.mit.edu
http://strategiccommunications.ucr.edu/
http://hvrd.me/GmV2x
http://diversity.mit.edu/diversity-summit-2015/
http://ucr.edu/
http://hvrd.me/IaiDY
http://ki.mit.edu
http://stanford.edu/academics/programs
http://news.stanford.edu/news/2015/january/jones-students-econversation-012815.html
http://harvard.edu/#skip
http://campusmap.ucr.edu/?loc=HINHL

1 个答案:

答案 0 :(得分:3)

对于像Java这样广泛使用的完善语言,更好地怀疑你的程序问题。

您可以通过打印出您的网址字符串的hashCode()toByteArray()来解决此问题,这可以告诉您原因不同的原因。

我猜是

  1. 你误解了差异
  2. 您的字符串包含前导和/或尾随空格(使用trim()删除)
  3. 你的字符串有UTF-8字符,看起来相同但不同。