我想知道在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也不能保证此输出,因此可以将其视为实现细节,它可能在将来的版本中更改,但是更改的可能性较小。输出的原因是AbstractCollection
的toString()
(是实现HashSet
和LinkedHashSet
使用)以迭代器返回的顺序列出了元素。
字符串java.util.AbstractCollection.toString()
返回此集合的字符串表示形式。字符串表示形式包括一个集合元素的列表,这些元素按其迭代器返回的顺序排列,并括在方括号(“ []”)中。相邻元素由字符“,”(逗号和空格)分隔。元素通过String.valueOf(Object)转换为字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句