2014-10-24 3 views
5

NavigableSet.lower(E) Javadoc говорит, что он возвращает наибольший элемент в этом наборе строго меньше, чем данный элемент, или null, если такого элемента нет. Почему здесь вывод? Разве это не должно быть 4?Как 1 больше 4?

NavigableSet original = new TreeSet(); 
original.add("1"); 
original.add("2"); 
original.add("3"); 
original.add("4"); 
original.add("10"); 
Object lower = original.lower("10"); 
System.out.println(lower); 

ответ

7

Поскольку значения String (ют) Set сравнивает с lexical order. Пожалуйста, не используйте Raw Types.

NavigableSet<Integer> original = new TreeSet<>(); 
original.add(1); 
original.add(2); 
original.add(3); 
original.add(4); 
original.add(10); 
Object lower = original.lower(10); 
System.out.println(lower); 

Выход

4 
3

то потому что вы сравниваете строк здесь, а не в качестве предполагаемых чисел. Таким образом, фактический порядок в наборе: 1, 10, 2, 3, 4!

Используйте дженерики: NavigableSet<Integer> original = new TreeSet<>(); и добавьте значения в виде целых чисел: original.add(1); и так далее.