我有一个ArrayList<Node>
,其中Node类是
public Node{
String key;
int x;} .
我希望按x的降序对此ArrayList
进行排序,如从高到低,而不导入除
import java.util.*;
我已经在网上看了,每个人都在说使用Collections.sort方法。但是,我不能使用它,并希望学习如何在不使用它的情况下对ArrayList
进行排序。
答案 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());
}
}
}
我希望这个解决方案可以帮助你完成工作......
答案 1 :(得分:-1)
如果您无法使用Collections.sort
,那么您将不得不自己编写sorting algorithm。插入排序和选择排序可能是最容易实现的
如果您有一个Node
的ArrayList,则比较2个索引i
和j
,如下所示:nodes.get(i).x > nodes.get(j).x
。排序的其余细节将取决于您选择的算法。