2014-06-30 18 views
5
import java.util.TreeSet; 
class Test 
{ 
    public static void main(String[] args) 
    { 
     TreeSet t=new TreeSet(); 
     t.add(null); 
     System.out.println(t); 
    } 
} 

output: NullPointerException. Ho letto in molti articoli che vuota TreeSet accetterà nullo per prima volta, ma sono sempre NullPointerException ... sto usando java7..can qualsiasi organismo chiarire il mio dubbio ....Aggiunta di null a vuoto TreeSet che genera NullPointerException

+0

Perché si desidera aggiungere 'null' a' TreeSet'? E quali articoli potrebbe essere? – Eypros

+0

Per me il codice funziona bene su java 1.6. Quale versione java usi? – Jens

+0

Sto usando la versione 1.7 di java. – user3516780

risposta

13

Il documentation for TreeSet#add in Java 7 stati:

NullPointerException - se l'elemento specificato è nullo e questo set utilizza ordinamento naturale, o il suo comparatore non permette elementi nulli

Quindi, dal momento che non hai specificato un'implementazione comparatore personalizzato in grado di gestire i valori null, è prendi l'NPE.

Edit: E 'stato possibile aggiungere un elemento null come primo elemento di un TreeSet/TreeMap in Java 6, ma si è ritenuto un bug:

+0

Ho aggiunto il primo elemento come null, quindi dove si trova la domanda di confronto degli oggetti? secondo la mia conoscenza TreeSet non comparerà per il primo elemento e accetterà null per la prima volta. – user3516780

+0

La documentazione è chiara, e se guardi il codice sorgente di 'TreeSet # add' e' TreeMap # put' (che sta supportando TreeSet), vedrai anche perché. – NilsH

+0

Grazie per la tua risposta ... ho capito la documentazione, ma sentitevi libero di visitare questo video https://www.youtube.com/watch? v = 4uvdetsRq90 vedere a 15:30 minuti ha aggiunto anche valori nulli e stampati. puoi chiarire il mio dubbio – user3516780

2

Questo perché un vuoto TreeSet al primo elemento di un il valore nullo può essere inserito, ma dopo aver inserito il primo valore se stiamo cercando di inserire altri oggetti, otterremo un valore NullPointerException.

per un non-vuoto TreeSet, se stiamo cercando di inserire un valore nullo in fase di esecuzione si otterrà un NullPointerException. Questo perché quando alcuni elementi sono presenti nell'albero, prima di inserire qualsiasi oggetto, confronta il nuovo oggetto con quelli esistenti usando il metodo compareTo() e decide dove posizionare il nuovo oggetto. Quindi inserendo null il metodo compareTo() internamente genera NullPointerException.

Penso che nella nuova versione di Java non sia consentito l'inserimento nullo.

1

API spiegazione:

Trama: inserimento di un elemento non valido in un TreeMap getta un NPE Descrizione A causa di un errore in java.util.TreeMap, era precedentemente possibile inserire elementi nulli validi ed elementi non effettuano l'interfaccia comparabile in una TreeMap o TreeSet vuota. Solo un singolo elemento non valido può essere inserito in una TreeMap o TreeSet vuota; elementi aggiuntivi causerebbero l'attesa NullPointerException o ClassCastException. Anche molte altre operazioni sulla collezione fallirebbero. A partire da Java SE 7, l'inserimento di un elemento null non valido o di un elemento che non implementa Comparable in una TreeMap o TreeSet vuota genera una NullPointerException.

0

Dal 1.7 in poi null non è affatto accettato da TreeSet. Se imponi di aggiungere, otterremo NullPointerException. Fino a 1,6 null è stato accettato solo come primo elemento.

Problemi correlati