JDK 6和JDK8在Java集合上的区别

哈利法

我想知道在Java 6和Java 8之间java.util.collections的实现是否已更改。我有此测试在Java 6中工作正常,但在Java 8中却没有

Set<String> types = new HashSet<String>();
String result;
types.add("BLA");
types.add("TEST");

Java 6中的结果:[BLA,TEST] Java 8中的结果:[TEST,BLA]我已经查看了JDK 7和JDK 8的文档和发行说明,但没有发现JDK 6和两者之间的任何区别其他与此有关。预先感谢您的澄清。

他们是

您没有理由期望[BLA, TEST]JDK6或JDK8中输出,因为Javadoc不会保证您HashSet将根据插入顺序(或任何顺序)来打印的元素允许不同的实现产生不同的顺序。

如果要确保两个JDK都输出,请使用LinkedHashSet,以保持插入顺序:

Set<String> types = new LinkedHashSet<String>();
String result;
types.add("BLA");
types.add("TEST");
System.out.println (types);

将打印

[BLA, TEST]

在两个版本中。

顺便说一下,Javadoc也不能保证此输出,因此可以将其视为实现细节,它可能在将来的版本中更改,但是更改的可能性较小。输出的原因是AbstractCollectiontoString()(是实现HashSetLinkedHashSet使用)以迭代器返回的顺序列出了元素。

字符串java.util.AbstractCollection.toString()

返回此集合的字符串表示形式。字符串表示形式包括一个集合元素的列表,这些元素按其迭代器返回的顺序排列,并括在方括号(“ []”)中。相邻元素由字符“,”(逗号和空格)分隔。元素通过String.valueOf(Object)转换为字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章