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].任何人都可以解释为什么会这样吗?
更改
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每次都创建一个新对象.