【问题标题】:Removing one object from multiple ArrayLists从多个 ArrayList 中删除一个对象
【发布时间】:2016-02-14 10:39:32
【问题描述】:

有没有办法做到这一点,通过从一个 ArrayList 中删除一个对象,从它存在的所有其他 ArrayList 中删除它?

例如在下面的代码中,如果我从 ArrayList fives 中删除所有内容,则 ArrayList test1 将不包含包含值 5 的 NumHolders。

public static void main(String[] args) throws FileNotFoundException{
    ArrayList<NumHolder> test1 = new ArrayList<NumHolder>();
    ArrayList<Five> fives = new ArrayList<Five>();
    String all = null;
    for (int i = 0; i < 90; i++){
        NumHolder number = new NumHolder(i);
        test1.add(number);
        if(i%5==0){
            fives.add(number);
        }
    for (int j = 0; j < fives.size();j++){
        fives.remove(0);
    }
    for (int j = 0; j < test1.size();j++){
        test1.get(j).toString();
    }

}

【问题讨论】:

  • 这是一个奇怪的问题。就因为如果NumHolder 和Five 是同一个对象或者其他对象,那么这些数组列表不就只是持有Integers 吗?你可以有一个集合的集合,但这样做似乎很奇怪,因为看起来 NumHolder 和 Five 可能有不同的对象。绝对可能如答案中所述,但如果您可以解释是否有适用的目的,也许可以使用更好的数据结构。

标签: java arraylist


【解决方案1】:

这比我的朋友容易,只是不要在没有提醒的情况下将除以 5 的数字添加到您的test1ArrayList

 ArrayList<NumHolder> test1 = new ArrayList<NumHolder>();
    ArrayList<Five> fives = new ArrayList<Five>();
    String all = null;
    for (int i = 0; i < 90; i++){
        NumHolder number = new NumHolder(i);
        if(i%5==0){
            fives.add(number);
            continue;
        }
        test1.add(number); 
      }
    for (int j = 0; j < fives.size();j++){
        fives.remove(0);
    }
    for (int j = 0; j < test1.size();j++){
        test1.get(j).toString();
    }

【讨论】:

  • 最后的整个循环实际上相当于对fives.clear(); 的一次调用——它不只是删除相同的元素N 次;随着每个元素被删除,其他元素被移动,因此它删除了每个连续的元素。
【解决方案2】:

如果您想从两个列表中删除所有 5,只需使用:

test1.removeAll(fives);
fives.clear();

【讨论】:

    【解决方案3】:

    您可以做的一件事是,不要从 fives 中删除您的元素,而是将它们保留在该列表中,并在所有其他列表上的一次调用中使用该列表:

    test1.removeAll(fives);
    

    如果您不希望这样 - 如果列表太多并且您不想在每个列表上调用 removeAll() 并且您确实希望所有列表共享元素,然后您可以将元素包装在包含单个成员变量的类中。然后将包装器中的成员变量设置为null,而不是删除它。然后所有列表将引用相同的包装元素,其包含的值设置为 null。

    【讨论】:

    • 如果我希望将项目“链接”起来,我必须这样做吗?我的意思是,当我从一个列表中删除一个实例时,可以从 test1 中说 NumHolder(10) Fives 不会有 NumHolder(10)?
    • 这不是我的意思。您的 NumHolder 类必须保存一个 Integer 而不是 int。还必须为他们提供一个 setter,以便您可以更改他们持有的对象。然后,不是从列表中删除元素,而是调用 numHolder.set(null)。那么您的所有列表仍将包含此持有者,但它将为空。当您遍历每个列表时,您将不得不跳过所有持有 null 的 numholders。或者,让 NumHolder 保存一个 int,但还要为其添加一个布尔值,指示它是否为空。
    猜你喜欢
    • 2014-05-04
    • 2021-08-14
    • 2023-04-06
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    相关资源
    最近更新 更多