这是我所拥有的代码,它检查将胶片读入散列集并检测胶片是否包含重复。
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?
答案 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)
你可以考虑的事情很少。
boolean isDuplicate= !set.add(list.readLine());
readline
,则会读取下一行。set.add(list.readLine()); if(set.contains(list.readLine())) hasDuplicate = true;
(hasDuplicate == false)