按升序对LinkedList进行排序

时间:2017-11-19 00:54:36

标签: java sorting linked-list nodes

对链表进行排序的最简单方法是什么?我有一个节点列表,每个节点有2个属性,一个int和一个字符串。我该如何按升序整数顺序对列表进行排序?

1 个答案:

答案 0 :(得分:1)

排序

您可以致电Collection#sortdocumentation)。但请注意,由于LinkedList未提供RandomAccess,运行时将非常不理想。

最好将所有内容添加到更合适的数据结构中,例如ArrayList,对其进行排序,然后重建LinkedList

LinkedList<X> input = ...

ArrayList<X> list = new ArrayList<>(input);
Collections.sort(list);

input = new LinkedList<>(list);

或者,您可以将所有内容添加到PriorityQueuedocumentation)中,该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个对象实现compareTodocumentation)。然后,您需要定义一个Comparator方法,该方法定义两个对象之间的关系。提供的方法将使用此自然顺序

或者,您可以创建一个comparedocumentation),它还定义了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,
));