Java ArrayList帮助

Too*_*ook 2 java class hashtable arraylist

因此,假设我有一个名为list1的字符串ArrayList,其中包含字符串"A","B","C","D","E".然后我有另一个类型为storageUnit的ArrayList,它是我写的一个类,名为list2.请参阅下面的代码以获得更好的解释:

ArrayList<String> list1 = new ArrayList<String>();
ArrayList<storageUnit> list2 = new ArrayList<storageUnit>();

storageUnit newUnit = new storageUnit();
for (int i = 0; i < list1.size(); i++) {
    newUnit.category = list1.get(i);
    list2.add(newUnit);      
}

static class storageUnit {
    String category;
    Hashtable<String, Integer> wordTable = new Hashtable<String, Integer>();
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试打印list2中所有storageUnits的所有类别,我得到[E,E,E,E,E]而不是[A,B,C,D,E].任何人都可以解释为什么会这样吗?

Ala*_*nse 6

更改

storageUnit newUnit = new storageUnit();
for (int i = 0; i < list1.size(); i++) {
    newUnit.category = list1.get(i);
    list2.add(newUnit);      
}
Run Code Online (Sandbox Code Playgroud)

for (int i = 0; i < list1.size(); i++) {
    storageUnit newUnit = new storageUnit();
    newUnit.category = list1.get(i);
    list2.add(newUnit);      
}
Run Code Online (Sandbox Code Playgroud)

你的代码正在做的是创建一个单独的对象(newUnit)并将其多次添加到列表中.每次都会覆盖它的类别,因此当您打印列表时,您会多次获得相同的值.

相反,您需要newUnit每次都创建一个新对象.