Это происходит, когда вы вводите тест с тем же temp .Когда вы вводите temp , он меняет свою предыдущую пару ключ-значение, а также значение ключа 0 в test .
Вы написали, что очистили карту temp .ОК, clear удаляет все пары ключ-значение карты, как c ++.Но очистка temp также убрала значение 0 , ключ test .Затем, когда вы снова вводите значение temp , оно меняет свое предыдущее значение (которое пусто, если вы очищаете temp) клавиши 0 из test .
, которую я только что отредактировалВаш код с некоторой печатью.Надеюсь, это поможет вам, если вы запустите его.
public static void main(String[] args) {
HashMap<Integer,HashMap<String, Object>> test = new HashMap<Integer,HashMap<String, Object>>();
HashMap<String,Object> temp = new HashMap<String, Object>();
temp.put("NAME","1str");
temp.put("PRICE", 2);
test.put(0,temp);
System.out.println("After first put:");
System.out.println("temp is: " + temp);
System.out.println("test is: " + test);
temp.clear();
System.out.println("After clearing it:");
System.out.println("temp is: " + temp);
System.out.println("test is: " + test);
temp.put("NAME","2str");
temp.put("PRICE",2.2);
System.out.println("After second put in temp, you haven't put in test yet:");
System.out.println("temp is: " + temp);
System.out.println("test is: " + test);
test.put(1,temp);
System.out.println("After second put:");
System.out.println("temp is: " + temp);
System.out.println("test is: " + test);
}