2012-06-13 5 views
6

Ho messo a nudo giù il codice per riprodurre un esempio che genera l'errore:java TreeSet gettando IllegalArgumentException: chiave fuori portata

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); 
    } 
} 

L'obiettivo del codice è quello di attuare una sorta di ribaltamento durante il recupero di sottoinsiemi del set. Per esempio. nel caso precedente, voglio tutti gli elementi da c [esclusivo] a b [incluso]. Ho notato che se commento le linee tailSet() o headSet(), il resto del codice funziona bene. Tuttavia, quando ho entrambe le linee, ottengo

java.lang.IllegalArgumentException: key out of range

+0

Forse si potrebbe iterare su di esso e farlo manualmente? – sp00m

+1

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

risposta

7

provare qualcosa di simile:

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); 
    } 

Quando si esegue

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

si effettivamente perdere il riferimento alla nuova TreeSet che si creato e ottenere il SortedSet che restituisce set.tailSet.

+0

+1 per "perdere il riferimento al nuovo TreeSet ... ottenere il SortedSet che set.tailSet restituisce". Non sono sicuro di quanto mi sia mancato. Ho effettuato alcuni test per confermare che l'errore si verifica perché sto cercando di aggiungere stringhe <= "b" a un sottoinsieme che dovrebbe contenere solo stringhe> "c". Salvataggio di una riga utilizzando NavigableSet set2 = new TreeSet (set.tailSet ("c", false)); Grazie! – Kes115

+0

Prego! – tibtof