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

发布于 2024-11-08 02:15:20 字数 611 浏览 1 评论 0原文

我正在尝试为此做一个哈希表的数组列表:

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

这完成了工作,但后来我需要使用 for 循环在 info 中添加一些哈希表:

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 复制到 info,它只定义指向 e 的指针,因此当我更新 e 时,所有插入的元素都会获得新的 e 值。

有人可以提供一些帮助吗?

谢谢您的宝贵时间。

I'm trying to do a arraylist of a hashtable for that i did:

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

this did the job but later i needed to add some hashtables inside info using a for cycle:

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

The problem is that method add doesnt copy e to info, it only define a pointer to e so when i update e all inserted elements gets the new e values.

Can anyone give some help ?

thx for your time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

中性美 2024-11-15 02:15:20

这应该有效:

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 而不是 <代码>哈希表)。

This should work:

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

You should try to avoid declaring collections by their implementation class (declare them as List instead of ArrayList, or Map instead of Hashtable).

泛滥成性 2024-11-15 02:15:20

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

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));
}
信息.add(e);
}

Don't need the clear() if you are using new everytime inside the loop.

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文