【问题标题】:Are there any collections, which throws exception, if added item is not unique?如果添加的项目不是唯一的,是否有任何集合会引发异常?
【发布时间】:2017-09-07 10:10:12
【问题描述】:

如果添加的项目不是唯一的,是否有任何集合会引发异常?

有输入异常信息或特殊异常。

【问题讨论】:

  • 这很不寻常。正常的方法是有类似addIfAbsent 的东西,你可以检查它的返回值。
  • 我会感到惊讶,即使 Set 没有,它只会返回 false 如果它已经存在。
  • 但是您可以创建您的集合,只需在您的 add 方法中使用 Set,如果原始 add() 返回 false,则抛出异常。

标签: java exception collections


【解决方案1】:

Java 中没有这样的集合。但是,第三方库可能包含此类集合。在 Java 中,Set 实现如 HashSetTreeSet 可防止添加重复对象。但是,如果您尝试添加重复的对象,它们不会抛出异常。如果对象已经存在于集合中,他们的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;
    }
}

【讨论】:

    【解决方案2】:

    我不知道有什么收藏可以做到这一点。

    一个简单的自制版本是创建java.util.HashSet&lt;E&gt;的子类

    在该类中,您提供每个构造函数并覆盖 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 2017-08-06
      • 2010-12-13
      • 2019-11-04
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多