简化Hashset重复检测器的代码

时间:2016-10-07 02:17:59

标签: java duplicates hashset

这是我所拥有的代码,它检查将胶片读入散列集并检测胶片是否包含重复。

public static void main(String args[]) throws Exception
{
    boolean hasDuplicate = false;
    Set<String> set = new HashSet<String>();        
    BufferedReader list = new BufferedReader( new FileReader(args[0]));     
    while(list.ready() && (hasDuplicate == false)){                         
        set.add(list.readLine());   
        if(set.contains(list.readLine())) hasDuplicate = true;                          
    }
    if(hasDuplicate == true){ 
        System.out.println("NOT UNIQUE");
    }else{ 
        System.out.println("UNIQUE");
    }
    list.close();           
}   

有没有办法让我简化

while(list.ready() && (hasDuplicate == false)){                         
        set.add(list.readLine());   
        if(set.contains(list.readLine())) hasDuplicate = true;                          
    }

所以我只需要调用一次hashset?

3 个答案:

答案 0 :(得分:1)

如果集合不包含指定的元素,则

HashSet#add()返回true。所以你可以这样做:

while(list.ready() && (hasDuplicate == false)){                         
    hasDuplicate = !set.add(list.readLine());   
}

虽然这有点令人困惑,所以我会重新说出你的变量,所以看起来更像是这样:

while(list.ready() && noDuplicates){                         
    noDuplicates = set.add(list.readLine());   
}

答案 1 :(得分:1)

如果项目尚未在集合中,add方法将返回true。所以你可以简单地打电话给结果:

while(list.ready() && (hasDuplicate == false)){                         
    if (!set.add(list.readLine()))
         hasDuplicate = true;                          
  }

其次原始代码无论如何都不会起作用,因为该行被读了两次并且只用了一次用于添加和一次用于检查。换句话说,它忽略了一半的输入。

答案 2 :(得分:0)

你可以考虑的事情很少。

  1. 如果Java Set是重复条目,则它将返回false
  2.   

    boolean isDuplicate= !set.add(list.readLine());

    1. 如果您第二次致电readline,则会读取下一行。
    2. set.add(list.readLine());   
      if(set.contains(list.readLine())) hasDuplicate = true;
      
      1. 布尔不需要与等运算符
      2. 进行比较
          

        (hasDuplicate == false)