2012-06-13 14 views
6

he desmontado el código para reproducir un ejemplo que arroja el error:java TreeSet IllegalArgumentException tirar: llave de rango

public class Test { 
    public static void main(String[] args) { 
    NavigableSet<String> set = new TreeSet<String>(
      Arrays.asList("a", "b", "c", "d")); 
    NavigableSet<String> set2 = new TreeSet<String>(); 
    set2 = set.tailSet("c", false); 
    set2.addAll(set.headSet("b", true)); 
    System.out.println(set2); 
    } 
} 

El objetivo del código es la implementación de algún tipo de vuelco al recuperar subconjuntos del conjunto. P.ej. en el caso anterior, quiero todos los elementos desde c [exclusivo] hasta b [incluido]. Noté que si comento las líneas tailSet() o headSet(), el resto del código funciona bien. Sin embargo, cuando tengo las dos líneas, recibo

java.lang.IllegalArgumentException: key out of range

+0

¿Quizás podría repetirlo y hacerlo manualmente? – sp00m

+1

+1 para un buen [SSCCE] (http://sscce.org/) – adarshr

Respuesta

7

intentar algo como esto:

public static void main(String[] args) { 
     NavigableSet<String> set = new TreeSet<String>(
       Arrays.asList("a", "b", "c", "d")); 
     NavigableSet<String> set2 = new TreeSet<String>(); 
     set2.addAll(set.tailSet("c", false)); 
     set2.addAll(set.headSet("b", true)); 
     System.out.println(set2); 
    } 

Al hacer

set2 = set.tailSet("c", false); 

en realidad se pierde la referencia a la nueva TreeSet que creado y obtener el SortedSet que set.tailSet devuelve.

+0

+1 para "perder la referencia al nuevo TreeSet ... obtener el SortedSet que set.tailSet devuelve". No estoy seguro de cómo me perdí eso. He hecho algunas pruebas para confirmar que el error surge porque estoy tratando de agregar cadenas que son <= "b" a un subconjunto que solo debe contener cadenas> "c". Se guardó una línea usando NavigableSet set2 = new TreeSet (set.tailSet ("c", false)); ¡Gracias! – Kes115

+0

¡De nada! – tibtof

Cuestiones relacionadas