你如何排序ArrayList

时间:2013-11-19 21:19:34

标签: java sorting arraylist

我有一个ArrayList<Node>,其中Node类是

public Node{

String key; 
int x;} .

我希望按x的降序对此ArrayList进行排序,如从高到低,而不导入除

之外的任何其他语句
import java.util.*;

我已经在网上看了,每个人都在说使用Collections.sort方法。但是,我不能使用它,并希望学习如何在不使用它的情况下对ArrayList进行排序。

2 个答案:

答案 0 :(得分:1)

您应该使用自己实现的排序方法。为此,您还需要学习用于交换值的ArryList类方法。 你必须广泛使用get(int)和set(int,E)来交换元素。

我向您展示了一个在Collections.Sort不可行时我喜欢做的解决方案。在这里我使用“冒泡排序”排序方法。我希望你从“冒泡排序”中了解到..     package online.solution;

import java.util.ArrayList;

public class Node {
    private String key;
    private int x;

    public Node(String key, int x) {
        this.key = key;
        this.x = x;
    }

    public int getX() {
        return x;
    }

    public static void main(String[] args) {
        Node n1 = new Node("B", 14);
        Node n2 = new Node("H", 7);
        Node n3 = new Node("U", 13);
        Node n4 = new Node("S", 1);
        Node n5 = new Node("H", 88);
        Node n6 = new Node("A", 99);
        Node n7 = new Node("N", 12);

        ArrayList<Node> nodes = new ArrayList<>();
        nodes.add(n1);
        nodes.add(n2);
        nodes.add(n3);
        nodes.add(n4);
        nodes.add(n5);
        nodes.add(n6);
        nodes.add(n7);

        System.out.println("Before sorting...");
        for (Node node : nodes) {
            System.out.println(node.getX());
        }

        int n, i, j;

        Node swap;
        n = nodes.size();

        for (i = 0; i < (n - 1); i++) {
            for (j = 0; j < n - i - 1; j++) {
                if (nodes.get(j).getX() > nodes.get(j + 1).getX()) {
                    swap = nodes.get(j);
                    nodes.set(j, nodes.get(j + 1));
                    nodes.set(j + 1, swap);
                }
            }
        }

        System.out.println("After sorting in Ascending Order...");
        for (Node node : nodes) {
            System.out.println(node.getX());
        }

        for (i = 0; i < (n - 1); i++) {
            for (j = 0; j < (n - i - 1); j++) {
                if (nodes.get(j).getX() < nodes.get(j + 1).getX()) {
                    swap = nodes.get(j);
                    nodes.set(j, nodes.get(j + 1));
                    nodes.set(j + 1, swap);
                }
            }
        }

        System.out.println("After sorting in Descending Order ...");
        for (Node node : nodes) {
            System.out.println(node.getX());
        }
    }
}

我希望这个解决方案可以帮助你完成工作......

enter image description here

答案 1 :(得分:-1)

如果您无法使用Collections.sort,那么您将不得不自己编写sorting algorithm。插入排序和选择排序可能是最容易实现的

如果您有一个Node的ArrayList,则比较2个索引ij,如下所示:nodes.get(i).x > nodes.get(j).x。排序的其余细节将取决于您选择的算法。