在插入到集合中之前是否应检查重复项

2022-09-01 10:35:55

我正在学习使用集合。我的问题是:集合不包含重复项。当我们尝试插入重复项时,它不会抛出任何错误并自动删除重复项。在插入 set 之前检查每个值是否存在是一种很好的做法吗?或者可以执行如下代码操作吗?我认为Java将在内部使用.你觉得怎么样?.contains(value)

考虑到集合中有n个元素,在这两种情况下,Big O的复杂性是多少?

import java.util.HashSet;
import java.util.Set;

public class DuplicateTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Set<Integer> mySet = new HashSet<Integer>();

         mySet.add(10);
         mySet.add(20);
         mySet.add(30);
         mySet.add(40);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);

         System.out.println("Contents of the Hash Set :"+mySet);
    }

}

答案 1

根据文档

public boolean add(E e)

将指定的元素添加到此集中(如果该元素尚不存在)。更正式地说,如果此集合不包含任何元素 e2,则将指定的元素 e 添加到此集合中,使得 (e==null ? e2==null : e.equals(e2))。如果此集合已包含该元素,则调用将保持该集合不变并返回 false。

因此,该方法已经返回您一个 true 或 false。因此,您无需进行额外检查。add()


答案 2

Set.add(E) 的 API 文档进行比较

该方法检查元素是否已在 .如果该元素已存在,则不会添加新元素,并且元素保持不变。在大多数情况下,您不需要检查任何内容。addSetSet

该方法的复杂性取决于您使用的 Set 的具体实现。


推荐