Я пытаюсь добавить объекты класса Employee в TreeSet. Я не реализую интерфейс Comparable или Comparator. Но код метода add ведет себя по-разному в разных системах. Почему так? Фрагмент кода ниже: -
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
Set<Employee> set = new TreeSet<Employee>();
set.add(new Employee());
// set.add(new Employee());
// set.add(new Employee());
}
}
В текущей системе (Win 10), независимо от того, пишу ли я метод set.add() один или три раза. Он всегда генерирует ClassCastException во время выполнения. Но говоря об этом вопросе - Почему TreeSet выдает ClassCastException Пользователь там написал, что он не получает исключения, когда использует метод добавления только один раз.
Кроме того, в другой системе (Win 7) вчера я пытался добавить объект 3 раза, трижды вызывая метод set, и ClassCastException не было!! Размер набора остается только 1, поэтому оказалось, что несколько объектов просто НЕ добавляются в набор.
Так что же может быть причиной разного поведения метода add?
Comparable
или предоставление пользовательского компаратора во время построения, то зачем задавать вопрос? Обратите внимание, что сравнение для упорядочивания на самом деле не нужно делать до добавления второго элемента. Возможно, есть небольшое изменение в реализации между Java 6 и Java 8. В любом случае вы не должны использовать отсортированный набор без какого-либо понятия о наличии компаратора. - person Tim Biegeleisen   schedule 17.06.2016