gpt4 book ai didi

java - 从 WeakReference 列表中删除对象

转载 作者:行者123 更新时间:2023-12-01 10:44:50 27 4
gpt4 key购买 nike

我做了一个快速测试来说明我的问题:

@Test
public void testRemovalFromWakLinkedList() {
Object o1 = new Object();
Object o2 = new Object();
assertFalse(o1.equals(o2));

ArrayList<WeakReference<Object>> list = new ArrayList<>();
assertTrue(list.isEmpty());

final WeakReference<Object> wo1 = new WeakReference<>(o1);
list.add(wo1);
final WeakReference<Object> wo2 = new WeakReference<>(o2);
list.add(wo2);
assertEquals(2, list.size());

final WeakReference<Object> wo2_2 = new WeakReference<>(o2);
list.remove(wo2_2);
assertFalse(wo2.equals(wo2_2));
assertEquals(1, list.size());
}

最后一个断言失败,因为对同一对象的 WeakReference 的两个实例不相同。因此无法从列表中删除该元素。

我知道this answer问题,这建议迭代列表来识别元素。由于删除操作会被相当频繁地调用,这似乎不是最好的选择(操作是 O(N))。

是否有更好的替代方法来删除该元素?或者我应该放弃使用 Wea​​kReference 并自己管理从列表中删除元素?

最佳答案

如果您使用的是 java 8,您可以像这样编写删除代码:

list.removeIf(wr -> o2.equals(wr.get()));

关于java - 从 WeakReference 列表中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249074/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com