2

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

输入 :

List< node1, node3, node 4, node1, node2, node3>

输出:

List <node1, node1, node2, node3, node3, node4>

顺序可以是任意 List <node3, node3, node2, node4, node1, node1>的,即,但至少相邻节点应该彼此相邻。

另请注意,排序不是基于“节点值”,而是仅基于节点引用。

更多参考:

我有一张地图,Map <headNode, tailNode>。由于链表可以相交,因此映射包含唯一的头部但不包含唯一的尾部。我的意图是根据“值”对地图进行排序,然后使用类似于 if (tail at pos i != tail @ pos i + 1) 的逻辑遍历地图,然后将 2 个链表相交并打印它们。

4

2 回答 2

2

您可以根据System.identityHashCode()列表中每个元素的值进行排序。您可以Comparator按如下方式实现:

enum IdentitySort implements Comparator<Node> {
    INSTANCE;

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

然后,您可以使用Collections.sort()

Collections.sort(list, IdentitySort.INSTANCE);
于 2013-08-29T21:30:19.667 回答
1

如果您打算消除重复项,为什么不使用HashSet

于 2013-08-29T21:29:43.853 回答