ArrayList <integer>上的嵌套迭代器从Java中的两个列表中删除值

时间:2016-12-08 13:39:05

标签: java arraylist iterator

我有两个嵌套的迭代器,用于包含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。

2 个答案:

答案 0 :(得分:0)

britenorweger都有相同的列表。

您在创建值时使用 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 );

取不同的数字对象。根据您当前的代码,两个迭代器实际上都在使用相同的数字对象!