哪种方式最快将元素添加到集合中?
我看到它的方式你可以用两种不同的方式做到这一点:
检查您要添加的元素是否已经在集合中,如果它不在集合中,请添加它。
只需添加它,因为一个集合具有唯一元素。我不确定这种方式不会引发错误。
答案 0 :(得分:5)
只需直接添加即可。它有检查的机制。
来自add方法的文档。
如果指定的元素尚不存在,则将其添加到此集。更正式地,如果此集合不包含元素e2(e == null?e2 == null:e.equals(e2)),则将指定元素e添加到此集合。如果此set已包含该元素,则调用将保持set不变并返回false。
答案 1 :(得分:2)
我做了一些工作来检查出来
Random rng = new Random();
ArrayList<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 100000; ++i)
numbers.add(rng.nextInt());
HashSet<Integer> set = new HashSet<>();
long beginNoCheck = System.nanoTime();
for (int i : numbers)
{
set.add(i);
}
long endNoCheck = System.nanoTime();
set = new HashSet<>();
long beginCheck = System.nanoTime();
for (int i : numbers)
{
if (!set.contains(i))
set.add(i);
}
long endCheck = System.nanoTime();
System.out.println("Without check: " + (endNoCheck - beginNoCheck));
System.out.println("With check: " + (endCheck - beginCheck));
看来,在添加元素之前检查HashSet
是否包含元素要快一点。我得到了像
不检查:66060748
检查:46209808不检查:38249163
检查:32058546不检查:58362677
检查:34429848不检查:52095512
检查:39612073不检查:34892990
检查:28945278不检查:42090287
检查:38426209
答案 2 :(得分:1)
您还可以随时查看实施情况,了解背后的情况:
HashSet只是一个HashMap
下面发布的测试可能会在不同的计算机上产生不同的结果,甚至只是在不同的情况下。如果运行时之间没有真正的巨大差异,那么可读性通常比几毫秒好很多。 通常,整个软件的简单适当的概念和设计远远超过了复杂的技巧。