Java:如何一次从多个列表中删除对象

时间:2020-03-20 13:19:24

标签: java list reflection reference runtime

我有多个列表和多个对象,例如:

class Example {
  public static void main(String[] args) {
    Dog dog1 = new Dog("MyDog1", 5);
    Dog dog2 = new Dog("MyDog2", 2);
    Dog dog3 = new Dog("MyDog3", 7);

    List<Dog> list1 = new ArrayList<>();
    list1.add(dog1);
    list1.add(dog2);
    list1.add(dog3);

    List<Dog> list2 = new ArrayList<>();
    list2.add(dog1);
    list2.add(dog2);
    list2.add(dog3);

    List<Dog> list3 = new ArrayList<>();
    list3.add(dog1);
    list3.add(dog2);
    list3.add(dog3);

    List<Dog> list4 = new ArrayList<>();
    list4.add(dog1);
    list4.add(dog2);
    list4.add(dog3);

    List<Dog> list5 = new ArrayList<>();
    list5.add(dog1);
    list5.add(dog2);
    list5.add(dog3);
  }
}

class Dog {
  private String name;
  private int age;

  public Dog(final String name, final int age) {
    this.name = name;
    this.age = age;
  }
}

现在,我想从所有列表中删除dog1,而不要遍历所有列表(在生产中,我有大量的列表和“ dogs”)。 也许可以使用反射删除所有引用,但是我在互联网上找不到类似的内容。

//编辑: 它与删除对象有关,以便释放内存。而且我不想使用list.remove(dog1);

从所有列表中手动删除它

3 个答案:

答案 0 :(得分:3)

尝试使用

list1.remove(dog1);
list2.remove(dog1);
list3.remove(dog1);
list4.remove(dog1);
list5.remove(dog1);

答案 1 :(得分:0)

类似的东西吗?

   Stream.of(list1, list2, list3, list4, list5).forEach(dogs -> dogs.remove(dog1));

答案 2 :(得分:0)

一种选择是使用WeakReference,然后将dog1对象设置为null,

WeakReference dog1 = new WeakReference(new Dog("MyDog1", 5));
WeakReference dog2 = new WeakReference(new Dog("MyDog2", 2));
WeakReference dog3 = new WeakReference(new Dog("MyDog3", 7));

List<WeakReference<Dog>> list1 = new ArrayList<>();
list1.add(dog1);
list1.add(dog2);
list1.add(dog3);

List<WeakReference<Dog>> list2 = new ArrayList<>();
list2.add(dog1);
list2.add(dog2);
list2.add(dog3);

dog1 = null;

System.gc(); //garbage collect
相关问题