Java 在什么情况下set.add()会失败?
下面是让我困惑的代码:Java 在什么情况下set.add()会失败?,java,collections,set,Java,Collections,Set,下面是让我困惑的代码: public class BoundedHashSet<T> { private final Set<T> set; private final Semaphore sem; public BoundedHashSet(int bound) { this.set = Collections.synchronizedSet(new HashSet<T>()); sem = new S
public class BoundedHashSet<T> {
private final Set<T> set;
private final Semaphore sem;
public BoundedHashSet(int bound) {
this.set = Collections.synchronizedSet(new HashSet<T>());
sem = new Semaphore(bound);
}
public boolean add(T o) throws InterruptedException {
sem.acquire();
boolean wasAdded = false;
try {
wasAdded = set.add(o); <-- line 1
return wasAdded;
}
finally {
if (!wasAdded) <-- line 2
sem.release();
}
}
public boolean remove(Object o) {
boolean wasRemoved = set.remove(o);
if (wasRemoved)
sem.release();
return wasRemoved;
}
}
公共类BoundedHashSet{
私有最终集;
私有最终信号量;
公共绑定哈希集(int绑定){
this.set=Collections.synchronizedSet(新HashSet());
sem=新信号量(绑定);
}
公共布尔加法(TO)抛出InterruptedException{
sem.acquire();
布尔值wasAdded=false;
试一试{
wasAdded=set.add(o);这里不涉及“失败”
从:
返回:
如果此集合尚未包含指定的元素,则为true
由于您列出的所有原因,它将失败。此外,集合是对象的一个独特集合。如果您添加的对象已经存在,它将返回false。因为您看起来很新:请查看返回值的含义。异常与此代码段不同,在本代码段中并不重要。