2011-07-09 48 views

回答

3

没有必要。 API告诉你它是否已经存在(如果你需要知道的话),并且Collections代码非常高效 - 比自己检查它更麻烦。

仅供参考,这里是这个API:

Set<Integer> set = new HashSet<Integer>(); 
boolean newAdditionToSet = set.add(1); 
System.out.println(newAdditionToSet); // true 
newAdditionToSet = set.add(1); 
System.out.println(newAdditionToSet); // false 

这是 “不好的做法”,因为该Set 无论如何检查它。您只需将新元素的工作量加倍,同时保持现有元素的工作量。

1

没有必要。 Set.add()会检查你。

根据是否添加该元素,它也会返回true或false。

1

一般来说,插入元素更有效率。对于正常的Set实现,插入代码几乎复制了contains调用的工作,因为它需要替换值,如果它已经存在。所以打电话contains首先是一般浪费时间,并且是一般不好的做法。

但并非总是如此!

一个情况下,你应该叫contains是,如果你不想add调用替换集中的现有价值。这种情况偶尔会出现;例如如果你正在使用该集来规范化一堆值。

相关问题