类似春泥的歌曲:一个JAVA中ArrayList的问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/01 14:48:46
public class ArrayListTest{
public static void main(String args[]){
java.util.ArrayList arr = new java.util.ArrayList();
java.util.Hashtable hs = new java.util.Hashtable();

for(int i=0;i<5;i++){
String aa= Integer.toOctalString(i);
hs.put("aaa",aa);
hs.put("bbb",aa);
hs.put("ccc",aa);
hs.put("ddd",aa);
arr.add(i,hs);
}

for(int i = 0;i<arr.size();i++){
System.out.print( (String)(((java.util.Hashtable)arr.get(i)).get("aaa")));
System.out.print( (String)(((java.util.Hashtable)arr.get(i)).get("bbb")));
System.out.print( (String)(((java.util.Hashtable)arr.get(i)).get("ccc")));
System.out.print( (String)(((java.util.Hashtable)arr.get(i)).get("ddd")));
System.out.println("");
}
}
}

这个类我预想的是会输出:
0000
1111
2222
3333
4444
可是实际输出结果却是:
4444
4444
4444
4444
4444
但是我在第一个for循环中打印arr时却可以得到正确的结果,请问谁能帮我解答一下是哪里出了问题,应如何修改,谢谢

把java.util.Hashtable hs = new java.util.Hashtable();这个语句移到第一个循环里面即可。
由于ArrayList在执行add操作时,如果Value是一个对象,则只放入一个引用。这样如果按照你的那种写法,则hs只分配了一次内存,这样每次循环都是在同一块内存中修改相应的Value值,这样就会导致旧值被新值覆盖,所以第二个循环不可能打印出正确信息来。