如果每次有attributeList
添加"我怎样才能清空{#1}} largeAttributeList
的值?我已经尝试过.clear()但是然后largeAttributeList丢失了所有值。
ArrayList<String> attributeList = new ArrayList<String>();
ArrayList<ArrayList<String>> largeAttributeList = new
ArrayList<ArrayList<String>>();
for (int i = 0; i < attribute.getLength(); i++) {
String current = attribute.item(i).getTextContent();
if(current.equals("Identifier")){
largeAttributeList.add(attributeList);
}
else{
attributeList.add(current);
}
}
答案 0 :(得分:7)
您可以在循环中隐藏数组:
....
ArrayList<String> attributeList;
for (int i = 0; i < attribute.getLength(); i++) {
String current = attribute.item(i).getTextContent();
if (current.equals("Identifier")) {
largeAttributeList.add(attributeList);
attributeList = new ArrayList<>();//<<<-------------
} else {
attributeList.add(current);
}
}
答案 1 :(得分:2)
您需要在清算前复制清单:
largeAttributeList.add(new ArrayList<>(attributeList));
更新:YCF_L解决方案明显优于我的解决方案,因为没有必要获得开销并为GC提供额外的工作。
答案 2 :(得分:2)
当你这样做时:
largeAttributeList.add(attributeList);
您没有复制attributeList,而是添加对largeAttributeList的引用。我认为最好的解决方案是在循环中重新初始化attributeList:
List<List<String>> identifierAttributes = new ArrayList<List<String>>();
List<String> attributes = new ArrayList<String>();
for (int i = 0; i < attribute.getLength(); i++) {
String current = attribute.item(i).getTextContent();
if(current.equals("Identifier")){
identifierAttributes.add(attributes);
attributes = new ArrayList<String>();
}
else {
attributes.add(current);
}
}
答案 3 :(得分:1)
在ArrayList
中添加attributeList
时为attributeList
创建新的largeAttributeList
对象:
largeAttributeList.add(new ArrayList<String>(attributeList));
以这种方式执行attributeList.clear()
时,您只清除attributeList
,而不是largeAttributeList
中添加的列表对象。