L'ajout de la valeur null à vide TreeSet élever NullPointerException
import java.util.TreeSet;
class Test
{
public static void main(String[] args)
{
TreeSet t=new TreeSet();
t.add(null);
System.out.println(t);
}
}
de sortie: NullPointerException.
J'ai lu dans plusieurs articles que vide TreeSet accepte la valeur null pour la première fois, mais je suis arriver NullPointerException...suis avec java7..tout organisme peut éclaircir mes doutes....
Pourquoi voulez-vous ajouter
Pour moi, le code fonctionne bien sur la version 1.6 de java. Java version utilisez-vous ?
Je suis à l'aide de java 1.7.
dans mon cas c'est plus que je ne veux pas avoir à tailler les valeurs null à partir d'une collection avant de se convertir à un TreeSet.
null
à un TreeSet
? Et dont les statuts qui pourrait être?Pour moi, le code fonctionne bien sur la version 1.6 de java. Java version utilisez-vous ?
Je suis à l'aide de java 1.7.
dans mon cas c'est plus que je ne veux pas avoir à tailler les valeurs null à partir d'une collection avant de se convertir à un TreeSet.
OriginalL'auteur user3516780 | 2014-06-30
Vous devez vous connecter pour publier un commentaire.
La documentation pour TreeSet#ajouter dans Java 7 états:
Donc, puisque vous n'avez pas spécifié un personnalisé comparateur de mise en œuvre qui peuvent gérer les valeurs null, vous obtenez le NPE.
Edit: Il était possible d'ajouter un
null
élément comme le premier élément d'uneTreeSet
/TreeMap
dans la version 6 de Java, mais il était considéré comme un bug:La documentation est claire, et si vous regardez le code source de
TreeSet#add
etTreeMap#put
(qui est la sauvegarde de la TreeSet), vous verrez pourquoi.Merci pour votre responce..j'ai compris la documentation, mais n'hésitez pas à visiter cette vidéo youtube.com/watch?v=4uvdetsRq90 voir, à 15:30 minutes il a ajouté nulle et imprimés de valeur. pouvez-vous préciser mon doute
Il est dit dans les commentaires de cette vidéo qu'il a été possible jusqu'à 1.6, mais pas de la 1.7.
Il est dit dans les notes de compatibilité de la version 6 de Java pour Java 7, que la possibilité d'ajouter
null
à unTreeMap
était un bug: oracle.com/technetwork/java/javase/.... Voir aussi: bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147OriginalL'auteur NilsH
C'est parce que pour un vide
TreeSet
au premier élément d'une valeur null peut être inséré, mais après l'insertion de cette première valeur si nous essayons d'insérer d'autres objets, puis nous aurons unNullPointerException
.Pour un non-vide
TreeSet
, si nous essayons d'insérer une valeur nulle au moment de l'exécution, vous obtiendrez unNullPointerException
. C'est parce que lorsque certains éléments existent dans l'arbre, avant d'insérer n'importe quel objet il compare le nouvel objet à l'aide de lacompareTo()
méthode et décide de l'endroit où mettre le nouvel objet. Donc, par l'insertion, null, lacompareTo()
méthode interne jetteNullPointerException
.Je pense que dans la nouvelle version de Java le nul de l'insertion n'est pas autorisé.
OriginalL'auteur user7471158
API explication:
Synopsis: l'Insertion d'un Élément non Valide dans un TreeMap Jette un NPE
Description: suite à une erreur de java.util.TreeMap, il était possible d'insérer des invalides null éléments et des éléments à ne pas implémenter l'interface Comparable dans un vide TreeMap ou TreeSet. Un seul élément non valide peut être inséré dans un vide TreeMap ou TreeSet; des éléments supplémentaires qui serait la cause de la devrait NullPointerException ou ClassCastException. La plupart des autres opérations lors de la collecte serait également échouer. Comme de Java SE 7, l'insertion d'un invalide, nulle élément ou un élément à ne pas mettre en œuvre Comparable dans un vide TreeMap ou TreeSet déclenche une exception NullPointerException.
OriginalL'auteur Maddy
De 1,7 à partir de la valeur null n'est pas du tout acceptée par TreeSet. Si vous appliquez à ajouter, puis nous aurons NullPointerException. Jusqu'à 1.6 null a été acceptée seulement comme le premier élément.
OriginalL'auteur Sathya