为什么不同类型的空集合相等?

下面是什么机制使相同的不同类型?


import static org.testng.Assert.assertEquals;

@Test

public void whyThisIsEqual() {

    assertEquals(new HashSet<>(), new ArrayList<>());

}


森栏
浏览 154回答 3
3回答

泛舟湖上清波郎朗

该assertEquals(Collection<?> actual, Collection<?> expected)&nbsp;文件说:断言两个集合以相同的顺序包含相同的元素。如果没有,则抛出 AssertionError。因此,将比较集合的内容,如果两个集合都为空,则它们是相等的。

慕妹3242003

他们不是...System.out.println(new&nbsp;HashSet<>().equals(new&nbsp;ArrayList<>()));&nbsp;//&nbsp;false这是特定于&nbsp;testng&nbsp;assertEquals查看该方法的文档,它说:断言两个集合以相同的顺序包含相同的元素。这对我来说很荒谬,aSet本身没有订单。Set<String> set = new HashSet<>();set.add("hello");set.add("from");set.add("jug");System.out.println(set); // [from, hello, jug]IntStream.range(0, 1000).mapToObj(x -> x + "").forEachOrdered(set::add);IntStream.range(0, 1000).mapToObj(x -> x + "").forEachOrdered(set::remove);System.out.println(set); // [jug, hello, from]因此,比较这些反对Collection在一些特定的时间点会产生有趣的结果。更糟糕的是,java-9&nbsp;Set::of方法在内部实现了随机化,因此顺序(或不是顺序)将因运行而异。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java