套装的"toArray"是否具有确定性?

Jer*_*emy 6 java collections set

显然,集合没有任何排序,所以如果我这样做,我不能指望任何特定的排序

String[] string = mySet.toArray();
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了一个用例,我不关心字符串数组的排序,但是我需要它是这样的情况:如果两个集合彼此相等,那么:

StringUtils.join(mySet.toArray(),',');
Run Code Online (Sandbox Code Playgroud)

无论我运行程序多少次,假设我坚持使用相同的代码,我将始终为这些集合生成相同的字符串.

我有这个保证吗?

类似地,这对于迭代器中给定Set的元素出现的顺序是否完全正确?

Dav*_*ave 7

一般来说,你不能保证Set你提到的顺序,所以即使它现在有效,也可能在将来不行.但是,您可以保证a的顺序,LinkedHashSet这样您就可以使用它.这仅在集合具有以相同顺序插入的元素时才有效.如果您没有这种情况,您可能只需对该集进行排序并打印即可.


rfe*_*eak 4

从技术上讲,不,你没有保证。Set是一个接口。实施方式会有所不同,可能会或可能不会遵守此要求。

从 Set 中提取结果后,通过自己对数组进行排序来强制解决此问题。