一般来说,在插入之前我应该​​检查一个元素是否在一个集合中?

时间:2011-07-09 00:37:33

标签: java set

我目前正在使用Java,因此我更有兴趣知道在效率方面是否更好地插入它。虽然我也很好奇,如果这是一个不好的做法。

3 个答案:

答案 0 :(得分:3)

没有必要。 API会告诉您它是否已经存在(如果您需要知道),并且集合代码非常有效 - 比自己检查它更有效率。

仅供参考,这是实际使用的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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

一般来说,插入元素更有效。对于正常的Set实现,插入代码几乎与contains调用的工作重复,因为它需要替换已存在的值。因此,首先调用contains 通常浪费时间,并且通常是不良做法。

但并不总是!

如果您不希望 contains调用来替换集合中的现有值,则应调用add的一种情况。偶尔会出现这种情况;例如如果您使用该集来规范化一堆值。