Мне было интересно, изменилась ли реализация 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");
Результат в Java 6: [BLA, TEST] Результат в Java 8: [TEST, BLA] Я уже просматривал документацию и примечания к выпуску JDK 7 и JDK 8, но не нашел никакой разницы между JDK 6 и двумя другие по этому поводу. Заранее благодарим за разъяснения.
У вас нет причин ожидать [BLA, TEST]
вывода в JDK6 или JDK8, поскольку Javadoc не обещает, что элементы HashSet
будут напечатаны в соответствии с порядком вставки (или любым порядком). Разные реализации могут производить разный порядок.
Если вы хотите обеспечить вывод в обоих JDK, используйте a LinkedHashSet
, который поддерживает порядок вставки:
Set<String> types = new LinkedHashSet<String>();
String result;
types.add("BLA");
types.add("TEST");
System.out.println (types);
напечатает
[BLA, TEST]
в обеих версиях.
Кстати, этот вывод также не гарантируется Javadoc, поэтому его можно рассматривать как деталь реализации, которая может измениться в будущих версиях, но вряд ли изменится. Причина этого вывода является то , что AbstractCollection
«s toString()
(который является внедрение HashSet
и LinkedHashSet
использование) перечисляет элементы в порядке их возвращенный итератор.
Строка java.util.AbstractCollection.toString ()
Возвращает строковое представление этой коллекции. Строковое представление состоит из списка элементов коллекции в том порядке, в котором они возвращаются ее итератором , заключенного в квадратные скобки («[]»). Смежные элементы разделяются символами «,» (запятая и пробел). Элементы преобразуются в строки как String.valueOf (Object).
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения