JDK 6 和 JDK8 之间的 Java 集合差异
Difference in Java Collection between JDK 6 and JDK8
我想知道 java.util.collections 的实现是否在 Java 6 和 Java 8 之间发生了变化。
我的测试在 Java 6 中运行良好,但在 Java 8
中运行良好
Set<String> types = new HashSet<String>();
String result;
types.add("BLA");
types.add("TEST");
Java6 中的结果:[BLA,测试]
结果 Java 8 : [TEST, BLA]
我已经查看了 JDK 7 和 JDK 8 的文档和发行说明,但没有发现 JDK 6 和其他两个关于此的区别。
预先感谢您的澄清。
您没有理由期望 JDK6 或 JDK8 中的 [BLA, TEST]
输出,因为 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
使用的实现)按照迭代器返回的顺序列出元素。
String java.util.AbstractCollection.toString()
Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets ("[]"). Adjacent elements are separated by the characters ", " (comma and space). Elements are converted to strings as by String.valueOf(Object).
实施确实发生了变化,但谁在乎呢?您正在处理一个 HashSet
,它记录为没有 rely-on 的订单。所以简单地打印,没有做任何事情,只是显示所有元素都在那里。
在 java-9 Set#of
和 Map#of
(新集合)中没有定义顺序 从 run-to-run例子。没有定义命令 == 不要依赖它。
我想知道 java.util.collections 的实现是否在 Java 6 和 Java 8 之间发生了变化。 我的测试在 Java 6 中运行良好,但在 Java 8
中运行良好Set<String> types = new HashSet<String>();
String result;
types.add("BLA");
types.add("TEST");
Java6 中的结果:[BLA,测试] 结果 Java 8 : [TEST, BLA] 我已经查看了 JDK 7 和 JDK 8 的文档和发行说明,但没有发现 JDK 6 和其他两个关于此的区别。 预先感谢您的澄清。
您没有理由期望 JDK6 或 JDK8 中的 [BLA, TEST]
输出,因为 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
使用的实现)按照迭代器返回的顺序列出元素。
String java.util.AbstractCollection.toString()
Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets ("[]"). Adjacent elements are separated by the characters ", " (comma and space). Elements are converted to strings as by String.valueOf(Object).
实施确实发生了变化,但谁在乎呢?您正在处理一个 HashSet
,它记录为没有 rely-on 的订单。所以简单地打印,没有做任何事情,只是显示所有元素都在那里。
在 java-9 Set#of
和 Map#of
(新集合)中没有定义顺序 从 run-to-run例子。没有定义命令 == 不要依赖它。