Java 按升序排序LinkedList
对链表排序最简单的方法是什么?我有一个节点列表,每个节点有两个属性,一个int和一个string。如何按整数升序对列表进行排序?排序 你可以直接调用Java 按升序排序LinkedList,java,sorting,linked-list,nodes,Java,Sorting,Linked List,Nodes,对链表排序最简单的方法是什么?我有一个节点列表,每个节点有两个属性,一个int和一个string。如何按整数升序对列表进行排序?排序 你可以直接调用Collection#sort()。但请注意,由于LinkedList不提供RandomAccess,运行时将非常不理想 最好将所有内容添加到更合适的数据结构中,如ArrayList,对其进行排序,然后重建LinkedList: LinkedList<X> input = ... ArrayList<X> list = ne
Collection#sort
()。但请注意,由于LinkedList
不提供RandomAccess
,运行时将非常不理想
最好将所有内容添加到更合适的数据结构中,如ArrayList
,对其进行排序,然后重建LinkedList
:
LinkedList<X> input = ...
ArrayList<X> list = new ArrayList<>(input);
Collections.sort(list);
input = new LinkedList<>(list);
如果你的链接列表
没有扩展集合
,你就不能调用像newarraylist(input)
这样方便的构造函数。在这种情况下,您需要手动将所有元素添加到其他列表中
比较器 如果要排序,需要定义一些顺序。这里有几个选项 您可以使
节点
对象实现可比较
()。然后需要定义一个compareTo
方法来定义两个对象之间的关系。提供的方法将使用此自然顺序
或者,您可以创建一个比较器
(),它还定义了一个比较
方法。提供的方法都将比较器
作为可选参数,如:
Collections.sort(list, comp);
// or
PriorityQueue<X> queue = new PriorityQueue(input, comp);
使用Java 8,您可以创建这样一个非常紧凑的比较器
:
Comparator<Node> comp = Comparator.comparing(Node::getIntProperty);
Comparator comp=Comparator.comparing(节点::getIntProperty);
您只需调用集合#排序
。但是请注意,当使用LinkedList
时,运行时将非常不理想。考虑将所有内容添加到更好的数据结构中,然后将其排序。然后从中创建一个链接列表。或者,只需将所有元素添加到PriorityQueue
,然后从中提取所有元素(它会自动排序),将它们添加到新的链接列表
。请求家庭作业帮助的问题必须包括您迄今为止为解决问题所做工作的摘要,如果你自己实现了列表,最简单的方法是1)将节点放入数组,2)使用Arrays::sort对节点进行排序,3)从排序后的节点重建列表。链表的随机访问性能较慢。由于这个原因,合并排序优于其他排序算法。@Zabuza-如何为链表实现集合排序?使用自底向上的合并排序和对节点的小型(26到32)引用数组相当快。链接列表的自上而下合并排序稍微慢一些,它重复扫描子列表以拆分它们。自下而上的合并排序是所有顺序访问。
@Override
public int compare(Node first, Node second) {
return Integers.compare(first.getIntProperty(), second.getIntProperty());
}
Comparator<Node> comp = Comparator.comparing(Node::getIntProperty);