Java 如何对引用列表进行排序?

Java 如何对引用列表进行排序?,java,sorting,Java,Sorting,我有一个linkedlist节点的列表。基本上是对节点对象的引用。某些引用指向同一对象。现在我的问题是如何对它们进行排序 输入: 列表 输出: 列表 命令可以仲裁 列表,但至少相邻节点应彼此相邻 还要注意,排序不是基于“节点值”,而是基于节点引用 更多参考: 我有一张地图,map。由于linkedlist可以相交,因此地图包含唯一的头部,但不包含唯一的尾部。我的目的是根据“值”对地图进行排序,然后使用类似于if的逻辑遍历地图(位置i处的尾部!=tail@pos i+1),然后2个链接列表相交并打

我有一个linkedlist节点的列表。基本上是对节点对象的引用。某些引用指向同一对象。现在我的问题是如何对它们进行排序

输入:

列表

输出:

列表

命令可以仲裁
列表
,但至少相邻节点应彼此相邻

还要注意,排序不是基于“节点值”,而是基于节点引用

更多参考:


我有一张地图,
map
。由于linkedlist可以相交,因此地图包含唯一的头部,但不包含唯一的尾部。我的目的是根据“值”对地图进行排序,然后使用类似于if的逻辑遍历地图(位置i处的尾部!=tail@pos i+1),然后2个链接列表相交并打印它们。

如果您计划消除重复项,为什么不使用HashSet呢?您可以根据列表中每个元素的值进行排序。您可以按如下方式实现一个:

enum IdentitySort implements Comparator<Node> {
    INSTANCE;

    @Override
    public int compare(Node n1, Node n2) {
        return Integer.compare(System.identityHashCode(n1),
                               System.identityHashCode(n2));
    }
}

发布节点的代码!它们是如何引用的?要确保列表中的引用是唯一的,还是要确保被引用的对象是唯一的。存在差异。提供了更多信息。hashset将确保条目是唯一的,但不会确保这些引用指向的对象是唯一的。您可以将多个唯一引用指向同一对象,其中equals()将返回true。如果将
equals()
重写为基于reference.System.identityHashCode以外的内容进行比较,则此操作将不起作用。由于我们将64位地址空间压缩为32位哈希,因此必然会发生冲突,因此,如果
node1
node2
恰好对同一事物进行散列,则按它排序可能会导致
(node1,node2,node1)
Collections.sort(list, IdentitySort.INSTANCE);