2014-10-24 16 views
5

Die NavigableSet.lower(E) Javadoc sagt, es gibt das größte Element in diesem Satz streng weniger als das angegebene Element, oder null, wenn es kein solches Element gibt. Warum ist 1 die Ausgabe hier? Sollte es nicht 4 sein?Wie ist 1 größer als 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); 

Antwort

7

Da die Werte sind String (s) die Set durch lexical order vergleicht. Bitte verwenden Sie nicht 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); 

Ausgang ist

4 
3

das ist, weil Sie Strings vergleichen hier, und nicht wie angenommen, ganze Zahlen sind. Die tatsächliche Reihenfolge im Set ist also: 1, 10, 2, 3, 4!

Verwenden Sie die Generika: NavigableSet<Integer> original = new TreeSet<>(); und die Werte als ganze Zahlen addieren: original.add(1); und so weiter.

Verwandte Themen