java - 什么是实现具有弱引用的集合集合的好方法,通过引用进行比较,并且在 Java 中也是可排序的?

标签 java android data-structures collections dalvik

我想要一个允许特定类型的其他对象向其注册的对象。理想情况下,它会将对它们的引用存储在某种集合中,并让 .equals() 通过引用而不是值进行比较。它不应该一直保持排序,但它应该能够在迭代集合之前进行排序。

通过 Java 集合库,我看到了我正在寻找的不同集合类型的各种特性,但我不确定我应该如何使用它们来构建我正在寻找的那种集合为。

如果重要的话,这就是 Android 环境中的 Java。

最佳答案

Java 内置的基于树的集合将不起作用。

为了说明,考虑一棵包含对节点“B”、“C”和“D”的弱引用的树:

   C
B     D

现在收集弱引用“C”,留下空值:

   -
B     D

现在向树中插入一个元素。 TreeMap/TreeSet 没有足够的信息来选择左子树或右子树。如果您的比较器说 null 是一个小值,那么在插入“A”时它将不正确。如果它说 null 是一个很大的值,那么在插入 'E' 时它会不正确。

按需排序是一个不错的选择。

一个更强大的解决方案是使用 ArrayList<WeakReference<T>>并实现 Comparator<WeakReference<T>>委托(delegate)给 Comparator<T> .然后调用Collections.sort()在迭代之前。

Android 的 Collections.sort使用 TimSort在幕后,如果输入已经部分排序,它会非常有效地运行。

关于java - 什么是实现具有弱引用的集合集合的好方法,通过引用进行比较,并且在 Java 中也是可排序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7059869/

相关文章:

java - 无法使用 jOOQ 编写 Postgres 数组列

java - 绑定(bind)两个泛型

c - 为什么我不能在我的链接列表中输入多个条目?

java - 面试时简单贪吃蛇游戏的数据结构设计

node.js - 在多个集合中搜索 mongoose

java - Java 中的流如何影响内存消耗?

java - 如何在此 TreeMap 中实现等于和比较

android - 返回 SslErrorHandler 上的上一个屏幕

php - 响应式设计 - Android 不缩放

android - 渲染问题 渲染过程中引发异常 : com/android/util/PropertiesMap