我正在学习使用套装.我的问题是:集合不包含重复项.当我们尝试插入重复项时,它不会抛出任何错误并自动删除重复项.在插入集合之前检查每个值是否存在是否是一个好习惯?或者可以执行类似下面的代码?我认为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 SetmySet = new HashSet (); 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); } }
Atri.. 25
根据文档:
public boolean add(E e)
如果指定的元素尚不存在,则将其添加到此集合中.更正式地,如果此集合不包含元素e2(e == null?e2 == null:e.equals(e2)),则将指定元素e添加到此集合.如果此set已包含该元素,则调用将保持set不变并返回false.
所以该add()
方法已经返回true或false.所以你不需要做额外的检查.
根据文档:
public boolean add(E e)
如果指定的元素尚不存在,则将其添加到此集合中.更正式地,如果此集合不包含元素e2(e == null?e2 == null:e.equals(e2)),则将指定元素e添加到此集合.如果此set已包含该元素,则调用将保持set不变并返回false.
所以该add()
方法已经返回true或false.所以你不需要做额外的检查.
与API的文档进行比较Set.add(E)
该add
方法检查元素是否已经存在Set
.如果元素已经存在,则不添加新元素,并Set
保持不变.在大多数情况下,您无需检查任何内容.
该方法的复杂性取决于您正在使用的Set的具体实现.