为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森栏 2021-09-03 10:33:28
下面是什么机制使相同的不同类型?import static org.testng.Assert.assertEquals;@Testpublic void whyThisIsEqual() {    assertEquals(new HashSet<>(), new ArrayList<>());}
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

assertEquals(Collection<?> actual, Collection<?> expected) 文件说:

断言两个集合以相同的顺序包含相同的元素。如果没有,则抛出 AssertionError。

因此,将比较集合的内容,如果两个集合都为空,则它们是相等的。


查看完整回答
反对 回复 2021-09-03
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

他们不是...

System.out.println(new HashSet<>().equals(new ArrayList<>())); // false

这是特定于 testng 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 Set::of方法在内部实现了随机化,因此顺序(或不是顺序)将因运行而异。


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信