EDIT2: Хорошо, это наиболее похоже на проблему с Eclipse Debugger. добавление следующего кода дает то, что я ожидал. Таким образом, нет странного поведения кода, только отладчик заставляет меня думать, был один. (Eclipse Indigo Build id 20110615-0604)
Object bla1 = map.get("String3");
Object bla2 = map.get("String4");
Object bla3 = map.get("String1");
Object bla4 = map.get("String2");
Object bla5 = map.get("innerMap");
Object bla6 = map.get("list");
РЕДАКТИРОВАТЬ: Это не проблема заказа! Я знаю, что такое HashMap, и мне нет дела до порядка. Проблема в том, что put ("list", list) не будет создавать новую запись в HashMap, она перезаписывает старую. put ("liste", list) добавит новую запись. Ни записи "списка", ни "списка" не существуют во время добавления. Пожалуйста, не говорите мне «Ты новичок», я не отлаживал пример кода (используя jdk1.6.0_24).
Я использую jdk1.6.0_24 в качестве среды выполнения и столкнулся с проблемой, которая мне кажется очень странной:
List<Object> list = new ArrayList<Object>();
list.add("A String 5");
list.add("A String 6");
Map<String, Object> aMap = new HashMap<String, Object>();
aMap.put("String7", "A String 7");
aMap.put("String8", "A String 8");
list.add(aMap);
Map<String, Object> innerMap = new HashMap<String, Object>();
innerMap.put("newString", "Yet another new String");
innerMap.put("bool", false);
innerMap.put("long", 3L);
innerMap.put("Integer", 3);
List<Object> anotherList = new ArrayList<Object>();
anotherList.add(1);
anotherList.add(1L);
anotherList.add("Another String");
anotherList.add(true);
List<Object> aList = new ArrayList<Object>();
aList.add(2);
aList.add(2L);
aList.add("Yet Another String");
aList.add(false);
anotherList.add(aList);
Map<String, Object> map = new HashMap<String, Object>();
map.put("String3", "A String 3");
map.put("String4", "A String 4");
map.put("String1", "A String 1");
map.put("String2", "A String 2");
map.put("innerMap", innerMap);
map.put("list", list); //here it happens
//map.put("list0", list); //here it happens also
//map.put("list1", list); //here it happens also
//map.put("list2", list); //this will work, when you use this line and comment out all 'here it happens' lines
map.put("anotherList", anotherList);
В зависимости от значения ключа новой записи, список объектов (который представляет собой ArrayList) обрабатывается так, как я ожидаю (добавляется на карту в новой позиции), или: список будет добавлен на карту в позиции, где один из ранее добавленных предметов был уже сидящий. Уже существующий объект не перезаписывается, он доступен через следующую.
Кто-нибудь может объяснить, что здесь происходит? Вы ожидаете такого поведения? Я еще не пробовал другую версию Java.