我正在学习使用集合。我的问题是:集不包含重复。当我们尝试插入重复项时,它不会抛出任何错误并自动删除重复项。在插入set之前检查每个值是否是一种好习惯?还是可以做一些类似下面的代码?我认为Java会在内部使用.contains(value)
进行检查。你怎么看?如果您在插入集合之前检查重复项目
考虑到有n元素进入集合,这两种情况下的大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);
}
}
因为'HashSet'由'HashMap'支持,所以你的答案可以在这里找到:http://stackoverflow.com/a/4553642/4490686 –
它不会做一个'contains'而是它只是赢了添加一个已经存在的元素,即它不会添加任何开销来执行此操作。 –
仅供参考,您无法通过添加与已应用相同复杂度的其他操作来更改Big Oh复杂性。我的意思是,这两个'for(int x:set){set.add(x); }和'for(int x:set){set.contains(x);} set.add(X); }'只要'add'和'contains'具有相同的复杂性,就具有相同的Big Oh复杂性。因为O(C * n)== O(n),对于任何常数C. – user3707125