如何在java中设置数组内哈希表的真实副本?

时间:2011-05-19 22:15:07

标签: java arraylist hashtable

我正在尝试为我做的哈希表做一个arraylist:

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);    
}

问题是方法添加不会将e复制到info,它只定义指向e的指针,所以当我更新e时,所有插入的元素都会获得新的e值。

有人能帮忙吗?

你的时间。

2 个答案:

答案 0 :(得分:2)

这应该有效:

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 :(得分:1)

如果你在循环中每次都使用new,则不需要clear()。

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

而(rs.next()){     e = new java.util.Hashtable();     for(String a:dados){         e.put(一个,rs.getString的(a));
    }     info.add(E);
}