в Java У меня есть объект ResultSet, который я использую для заполнения HashMap объекта, таким образом:Абсурда поведения об объекте HashMap
rs = db.executeQuery(query);
rs.last();
rows = rs.getRow();
rs.beforeFirst();
String current;
String[] current_columns = new String[rows];
int x;
for(int i=0; i<n_col; i++){ //scroll columns
x=0;
while(rs.next()){ // scroll rows
current = rs.getString(columns[i]);
current_columns[x++] = current;
}
//a little output debug
System.out.print("hm.put("+columns[i]+", {");
for(int j=0; j<current_columns.length; j++)
System.out.print(current_columns[j]+" ");
System.out.println("});");
//end of output debug
hm.put(columns[i], current_columns);
rs.beforeFirst();
}
отладочных печатает:
hm.put (a, {a1 a2});
hm.put (b, {b1 b2});
Так что, если я пишу hm.get инструкции ("A") он должен вернуть мне строку массива { "a1", "a2"}, а если я пишу hm.get ("б") он должен вернуть мне строку массива {"b1", "b2"}.
Но на практике, когда я пытаюсь получить значения, hashmap возвращает мне всегда последний массив, который я положил, независимо от ключа. Так что, если я пишу инструкции:
System.out.println(hm.get("a")[0]);
System.out.println(hm.get("b")[0]);
он печатает:
b1
b1
Почему HashMap это поведение? В чем проблема ?
Что делать, если вы печатаете _actual 'HashMap'_, а не свой вывод отладки? Я думаю, что у вас есть ошибка в другом месте вашего кода. –