我所需要的只是对不使用内置 Java 排序器的 ArrayList 进行排序的最简单方法。目前我将 ArrayList 更改为 Array 并使用线性排序代码,但我稍后需要调用一些元素,而 ArrayLists 更容易做到这一点。
9 回答
您可以使用匿名排序。
Collections.sort(<ArrayList name>, Comparator<T>() {
public int compare(T o1, T o2) {
.....
....
}
});
其中 T 是您要排序的类型(即字符串、对象)并根据您自己的需要简单地实现 Comparator 接口
假设“内置排序”是指 Collections.sort() 并且您对已实现的排序算法很好,您可以将排序后的数组转换为ArrayList
ArrayList list = new ArrayList(Arrays.asList(sortedArray));
get(int index)
或者,您可以使用andset(int index, E element)
方法重写排序算法以使用列表(例如 ArrayList)而不是数组。
假设ArrayList<String> a
...
最简单(但我猜这是你说你不能使用的):
Collections.sort(a);
下一个最简单的(但浪费):
a = new ArrayList<String>(new TreeSet<String>(a));
排序通过命令提示符传递的参数;不使用 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]);
}
}
}
通过使用 Array.sort
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] + " ");
}
}
这是一个“简单”的快速排序实现:
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
.
如果您打算自己对数组进行排序,那么最简单的算法之一就是冒泡排序。这通过多次遍历数组,比较相邻的元素对,如果左侧大于右侧则交换它们。
由于这是家庭作业,剩下的就交给你了。首先可视化您的算法,然后考虑您的算法需要进行多少次通过,以及每次通过需要从哪里开始。然后编码。
您还需要了解并解决如何比较一对数组元素的问题:
- 如果元素是原始类型的实例,则只需使用关系运算符。
- 如果元素是引用类型的实例,则需要使用
Comparable
orComparator
接口。在 javadocs 中查找它们。(查找它们是您作业的一部分……)
Comparator
在java中检查。您可以使用它实现自己的排序,并使用Collections.sort(..)
您自己的来对数组列表进行排序Comparator
如果我没记错的话,当你从 arrayList 中间拉出一个元素时,它会自动将其余元素向下移动。如果您执行一个循环来查找最小值并将其拉出,则将其放在 arrayList 的末尾。每次通过 i-- 用于索引。那就是少用一个。因此,在 10 个元素的列表中,您将查看所有 10 个元素,取最低的一个并将其附加到末尾。然后,您将查看前九个并取出其中最低的一个并将其附加到末尾。然后是前 8 个,依此类推,直到列表排序。