我想要一个允许特定类型的其他对象向其注册的对象。理想情况下,它会将对它们的引用存储在某种集合中,并让 .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/