我需要最简单的方法来对ArrayList进行排序,但不使用Java内置的排序器。目前,我将ArrayList更改为Array并使用线性排序代码,但后来需要调用一些元素,而ArrayList更容易实现这一点。
我需要最简单的方法来对ArrayList进行排序,但不使用Java内置的排序器。目前,我将ArrayList更改为Array并使用线性排序代码,但后来需要调用一些元素,而ArrayList更容易实现这一点。
Collections.sort(<ArrayList name>, Comparator<T>() {
public int compare(T o1, T o2) {
.....
....
}
});
如果您想对类型进行排序(例如String,Objects),只需根据自己的需要实现Comparator接口即可。
ArrayList<String> a
...Collections.sort(a);
a = new ArrayList<String>(new TreeSet<String>(a));
ArrayList list = new ArrayList(Arrays.asList(sortedArray));
或者,您可以通过使用 get(int index)
和 set(int index, E element)
方法,将您的排序算法重写以与List(如ArrayList)一起使用,而不是数组。
toArray(T[] a)
方法),然后创建一个新的ArrayList,如此所示,或者清空并重新填充原始数组(使用addAll(Arrays.asList(sortedArray))
)。+1是对第一个响应OP约束条件的答案的奖励。 - Ted Hopp不使用Arrays.sort对通过命令提示传递的参数进行排序
public class Sort {
public static void main(String args[])
{
for(int j = 0; j < args.length; j++)
{
for(int i = j + 1; i < args.length; i++)
{
if(args[i].compareTo(args[j]) < 0)
{
String t = args[j];
args[j] = args[i];
args[i] = t;
}
}
System.out.println(args[j]);
}
}
}
import java.util.*;
public class IntegerArray {
public static void main(String args[])
{
int[] num=new int[]{10, 15, 20, 25, 12, 14};
Arrays.sort(num);
System.out.println("Ascending order: ");
for (int i=0; i<num.length; i++)
System.out.print(num[i] + " ");
}
}
在Java中检查Comparator
。您可以使用它来实现自己的排序,并使用Collections.sort(..)
使用您自己的Comparator
对数组列表进行排序。
Comparator
本身并不实际进行任何排序,它只定义了排序规则。他仍然需要调用一个使用 Comparator
(或 Comparable
接口)来确定如何排序的排序函数。 - Jon Newmuis如果我没记错的话,当你从一个 arrayList 中取出一个元素时,它会自动将剩余的元素向下移动。如果你做一个循环来查找最小值并将其取出,然后将其放在 arrayList 的末尾,则每次循环中索引都会减少 1。因此,在一个包含 10 个元素的列表中,您将查看所有的 10 个元素,获取最小值并将其附加到末尾。接下来,您将查看前九个元素,并将其中的最小值取出并附加到末尾。然后是前八个元素等等,直到列表被排序。
如果你需要自己对数组进行排序,那么最简单的算法之一就是冒泡排序。它通过多次遍历数组,比较相邻的元素,并在左侧元素大于右侧元素时交换它们来工作。
由于这是作业,我会让你自己去解决剩下的问题。首先要想象你的算法,然后考虑你的算法需要进行多少次遍历,以及每次遍历需要从哪里开始。然后编写代码。
你还需要理解并解决如何比较一对数组元素的问题:
Comparable
或Comparator
接口。在javadoc中查找它们。(查找它们也是你的作业的一部分...)public Comparable<Object>[] quickSort(Comparable<Object>[] array) {
if (array.length <= 1) {
return array;
}
List<Comparable<Object>> less = new ArrayList<Comparable<Object>>();
List<Comparable<Object>> greater = new ArrayList<Comparable<Object>>();
Comparable<Object> pivot = array[array.length / 2];
for (int i = 0;i < array.length;i++) {
if (array[i].equals(pivot)) {
continue;
}
if (array[i].compareTo(pivot) <= 0) {
less.add(array[i]);
} else {
greater.add(array[i]);
}
}
List<Comparable<Object>> result = new ArrayList<Comparable<Object>>(array.length);
result.addAll(Arrays.asList(quickSort(less.toArray(new Comparable<Object>[less.size()]))));
result.add(pivot);
result.addAll(Arrays.asList(quickSort(greater.toArray(new Comparable<Object>[greater.size()]))));
return result.toArray(new Comparable<Object>[result.size()]);
}
使用System.arraycopy
可以提高使用数组和列表构建结果的最后操作。