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

时间:2013-08-29 21:25:43

标签: java sorting

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

输入:

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>。由于链表可以相交,因此地图包含唯一的头部但不包含唯一的尾部。我的目的是根据'value'对地图进行排序,然后使用类似于if的逻辑(在pos i的尾部!= tail @ pos i + 1)遍历地图,然后完成2个链接列表的交叉并打印它们。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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