如果我们考虑使用以下类来计算 HashSet 中添加的对象:
public class CountingHashSet<E> extends HashSet<E> {
public int addCount = 0;
@Override
public boolean add(E e) {
addCount +=1;
return super.add(e);
}
@Override
public boolean addAll(Collection<?
extends E> c) {
addCount += c.size();
return super.addAll(c);
}
}
然后,JUnit 测试失败:
@Test
public void testCount() {
CountingHashSet<Integer> s = new CountingHashSet<>();
s.addAll(Arrays.asList(1, 2, 3, 4, 5));
for (int i = 6; i <= 10; ++i)
s.add(i);
assertEquals(10, s.addCount);
}
我得到以下信息:
java.lang.AssertionError: expected:<10> but was <15>
为什么我得到 15 ?在我看来,如果我查看源代码,我会看到添加每个元素的s.addAll(myCollection)
调用。但是为什么叫我重新定义的?(这就是为什么我得到 15 而不是 10)super.addAll(c)
hashSet
addAll(c)
add(e)
super.addAll(c)
add method