对链表进行排序的最简单方法是什么?我有一个节点列表,每个节点有2个属性,一个int和一个字符串。我该如何按升序整数顺序对列表进行排序?
答案 0 :(得分:1)
您可以致电Collection#sort
(documentation)。但请注意,由于LinkedList
未提供RandomAccess
,运行时将非常不理想。
最好将所有内容添加到更合适的数据结构中,例如ArrayList
,对其进行排序,然后重建LinkedList
:
LinkedList<X> input = ...
ArrayList<X> list = new ArrayList<>(input);
Collections.sort(list);
input = new LinkedList<>(list);
或者,您可以将所有内容添加到PriorityQueue
(documentation)中,该poll
提供排序LinkedList<X> input = ...
PriorityQueue<X> queue = new PriorityQueue(input);
input = new LinkedList<>();
while (!queue.isEmpty()) {
input.add(queue.poll());
}
操作:
LinkedList
如果Collection
未延伸new ArrayList<>(input)
,则无法调用Node
之类的便捷构造函数。在这种情况下,您需要手动将所有元素添加到另一个列表中。
如果您想要排序,则需要定义一些订单。你有几个选择。
您可以使Comparable
个对象实现compareTo
(documentation)。然后,您需要定义一个Comparator
方法,该方法定义两个对象之间的关系。提供的方法将使用此自然顺序。
或者,您可以创建一个compare
(documentation),它还定义了Comparator
方法。提供的方法都将Collections.sort(list, comp);
// or
PriorityQueue<X> queue = new PriorityQueue(input, comp);
作为可选参数,例如:
@Override
public int compare(Node first, Node second) {
return Integers.compare(first.getIntProperty(), second.getIntProperty());
}
该方法可能如下所示:
Comparator
使用Java 8,您可以创建一个非常紧凑的Comparator<Node> comp = Comparator.comparing(Node::getIntProperty);
:
$circular_query= new WP_Query(array(
'post_type'=>'circular',
'posts_per_page' => 7,
'order' => 'ASC',
'orderby' => 'post_title',
'paged' => $paged,
));