Как установить реальную копию хеш-таблицы внутри массива в Java? - PullRequest
1 голос
/ 20 мая 2011

Я пытаюсь создать массив хеш-таблиц, для которых я сделал:

ArrayList<java.util.Hashtable<String, String>> info = new ArrayList<java.util.Hashtable<String, String>>();

это сделало свою работу, но позже мне нужно было добавить несколько хеш-таблиц внутри информации, используя цикл for:

java.util.Hashtable<String, String> e = new java.util.Hashtable<String, String>();
while(rs.next()){
    e.clear();
    for(String a:dados){
        e.put(a,rs.getString(a));                       
    }
    info.add(e);    
}

Проблема в том, что метод add не копирует e в информацию, он только определяет указатель на e, поэтому, когда я обновляю e, все вставленные элементы получают новые значения e.

Может кто-нибудь помочь??

спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Это должно работать:

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Map;
import java.util.List;

List<Map<String, String>> info = new ArrayList<Map<String, String>>();

while (rs.next()) {
    Map<String, String> e = new Hashtable<String, String>();
    e.clear();
    for (String a : dados) {
        e.put(a, rs.getString(a));
    }
    info.add(e);
}

Следует избегать объявления коллекций по их классу реализации (объявите их как List вместо ArrayList или Map вместо Hashtable).

1 голос
/ 20 мая 2011

Не требуется clear (), если вы используете new каждый раз внутри цикла.

java.util.Hashtable e = new java.util.Hashtable ();

while(rs.next ()) {e = new java.util.Hashtable ();for (Строка a: dados) {e.put (a, rs.getString (a));
} info.add (e);
}

...