是否有任何集合,如果添加的项目不是唯一的,则抛出异常?

时间:2017-09-07 10:10:13

标签: java exception collections

是否有任何集合,如果添加的项目不是唯一的,则抛出异常?

输入异常消息或特殊异常。

2 个答案:

答案 0 :(得分:3)

Java中没有这样的集合。但是,第三方库可能包含此类集合。在Java中,SetHashSet之类的TreeSet实现会阻止添加重复的对象。但是,如果您尝试添加重复的对象,它们不会抛出异常。如果对象已存在于集合中,则他们的add方法只返回false。如果它不是您想要的,您可以扩展其中一个类并重写add方法并抛出异常。像这样:

import java.util.HashSet;

public class MySet<E> extends HashSet<E> {
    @Override
    public boolean add(E e) {
        if(!super.add(e))
            throw new RuntimeException("The object already exists in the collection.");

        return true;
    }
}

答案 1 :(得分:2)

我不知道会有任何收藏品。

简单的自制版本是创建java.util.HashSet<E>

的子类

在该类中,您提供每个构造函数并覆盖Set.add 如果super.add(e)返回false,则抛出异常。 (请参阅Mehdi Javan 第一个实施的答案)

如果您希望能够使用任何Set,只需使用一种方法为您接受Set

public void addIfAbsent(Set<E> set, E e) throws TheException {
     if(!set.add(e)) {//throw exception }
}

由于我们在这里,您可以使其适用于任何Collection ...

public void addIfAbsent(Collection<E> set, E e) throws TheException {
     if(c.contains(e)) { //throw exception }
     c.add(e);
}