Treemapはnullのキーの値、nullのキーの値に関連しています。
HashMapはnull値nullキーを保存できることを知っています。それならTreeMapは大丈夫ですか? まず、null値を格納できるかどうかを見ます。コードは以下の通りです。 1 , 4 1 , 4 このように運行した結果は大丈夫です。正常にnullを出力できます。 じゃ、nullキーは?変更コードはこのようにしています。 1 , 4 5 1 , 4 5 Exception in thread「main」 Java.lang.Null PointerException それならts.put(null、3);この行のプログラムは空のポインターに異常を報告しました。 まずはString類がComprableインターフェースを実現したことを明確にします。したがって、TreeMapはコンパレータに入る必要がありません。ここで空のポインターを申し込みましたが、データを預け入れる時に、String類のcompreToメソッドを呼び出すため、nullとなります。compreToメソッドを呼び出すと空のポインターが発生します。 では、put法の下の部分が分かったら、その保存nullキーの強制を実現するためにコンパレータに入ることができます。コードは以下の通りです 1 , 4 5 , , 8 9, 10 11 1 , 4 5 , , 8 9, 10 11 TreeMapにコンパレータが入ってきて、putメソッドは優先的にコンパレータを呼び出すので、s 1==nullの時に1を強制的に返すと、nullキーを記憶することができます。しかし、このときはget(キー)の方法で値を取得することはできません。以下のようにキーペアを巡回して取得することができます。 1 , 4 1 , 4
TreeMap ts = new TreeMap<>();
ts.put(" ", 1);
ts.put(" ", null);
System.out.println(ts.get(" "));
TreeMap ts = new TreeMap<>();
ts.put(" ", 1);
ts.put(" ", 2);
ts.put(null, 3);
System.out.println(ts.get(null));
TreeMap<String, Integer> ts = new TreeMap<>(new Comparator<String>() {
public int compare(String s1, String s2) { // s1 s2
if (s1 == null){
return 1;
}
else {
return s2.charAt(0) - s1.charAt(0);
}
}
});
ts.put(" ", 1);
ts.put(" ", 2);
ts.put(null, 3);
Set<Map.Entry<String, Integer>> s = ts.entrySet();
for (Map.Entry<String, Integer> entry : s) {
System.out.println(entry);
}