我有一个链表的节点列表。基本上是对节点对象的引用。一些参考指向同一个对象。现在我的问题是如何对它们进行排序。
输入:
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个链接列表的交叉并打印它们。
答案 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