我有两个嵌套的迭代器,用于包含Integer的ArrayLists。 当两者具有相同的值并且我只想从其中一个列表中删除此值时,它会从两个列表中删除它们。列表包含值1-5,并且在此迭代之后,两者都包含2-5,但我希望第二个列表保持不变:
public static boolean revise(ArrayList<Value> arc) {
Value node1 = arc.get(1);
Value node2 = arc.get(0);
boolean delete = false;
loop:
for (Iterator<Integer> iterator1 = node1.getValues().iterator(); iterator1.hasNext(); ) {
Integer i = iterator1.next();
for (Iterator<Integer> iterator2 = node2.getValues().iterator(); iterator2.hasNext(); ) {
Integer j = iterator2.next();
if (i == j) {
iterator1.remove();
delete = true;
continue loop;
}
}
}
return delete;
}
编辑: 这就是我的Value类:
public class Value {
private ArrayList<Integer> values;
private String name;
public Value(String name, ArrayList<Integer> values) {
this.name = name;
this.values = values;
}
public String getName() {
return name;
}
public ArrayList<Integer> getValues() {
return values;
}
public String toString(){
return (name + values.toString());
}
}
这是节点的创建方式:
public static ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
//land
public static Value brite = new Value("Brite", numbers);
public static Value norweger = new Value("Norweger", numbers);
arc是一个包含两个值的ArrayList。
答案 0 :(得分:0)
brite
和norweger
都有相同的列表。
您在创建值时使用 List.clone():
public static Value brite = new Value("Brite", numbers.clone());
public static Value norweger = new Value("Norweger", numbers.clone());
或者您创建了两个不同的列表:
public static Value brite = new Value("Brite", new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)));
public static Value norweger = new Value("Norweger", new ArrayList<>(Arrays.asList(4, 6, 7)));
答案 1 :(得分:0)
如果你在下面尝试,你就会明白出了什么问题。
public static ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
public static ArrayList<Integer> numbers2 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
//land
public static Value brite = new Value("Brite", numbers);
public static Value norweger = new Value("Norweger", numbers2 );
取不同的数字对象。根据您当前的代码,两个迭代器实际上都在使用相同的数字对象!