3

我所需要的只是对不使用内置 Java 排序器的 ArrayList 进行排序的最简单方法。目前我将 ArrayList 更改为 Array 并使用线性排序代码,但我稍后需要调用一些元素,而 ArrayLists 更容易做到这一点。

4

9 回答 9

5

您可以使用匿名排序。

Collections.sort(<ArrayList name>, Comparator<T>() {

    public int compare(T o1, T o2) {
    .....
    ....
    }      
});

其中 T 是您要排序的类型(即字符串、对象)并根据您自己的需要简单地实现 Comparator 接口

于 2012-05-09T02:06:40.100 回答
3

假设“内置排序”是指 Collections.sort() 并且您对已实现的排序算法很好,您可以将排序后的数组转换为ArrayList

ArrayList list = new ArrayList(Arrays.asList(sortedArray));

get(int index)或者,您可以使用andset(int index, E element)方法重写排序算法以使用列表(例如 ArrayList)而不是数组。

于 2012-05-09T02:15:17.980 回答
3

假设ArrayList<String> a...

最简单(但我猜这是你说你不能使用的):

Collections.sort(a);

下一个最简单的(但浪费):

a = new ArrayList<String>(new TreeSet<String>(a));
于 2012-05-09T02:00:10.287 回答
2

排序通过命令提示符传递的参数;不使用 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] + " ");
        }
}
于 2012-05-09T09:11:49.610 回答
0

这是一个“简单”的快速排序实现:

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.

于 2012-05-09T09:37:09.657 回答
0

如果您打算自己对数组进行排序,那么最简单的算法之一就是冒泡排序。这通过多次遍历数组,比较相邻的元素对,如果左侧大于右侧则交换它们。

由于这是家庭作业,剩下的就交给你了。首先可视化您的算法,然后考虑您的算法需要进行多少次通过,以及每次通过需要从哪里开始。然后编码。

您还需要了解并解决如何比较一对数组元素的问题:

  • 如果元素是原始类型的实例,则只需使用关系运算符。
  • 如果元素是引用类型的实例,则需要使用ComparableorComparator接口。在 javadocs 中查找它们。(查找它们是作业的一部分……)
于 2012-05-09T03:06:39.650 回答
0

Comparator在java中检查。您可以使用它实现自己的排序,并使用Collections.sort(..)您自己的来对数组列表进行排序Comparator

于 2012-05-09T02:00:20.347 回答
0

如果我没记错的话,当你从 arrayList 中间拉出一个元素时,它会自动将其余元素向下移动。如果您执行一个循环来查找最小值并将其拉出,则将其放在 arrayList 的末尾。每次通过 i-- 用于索引。那就是少用一个。因此,在 10 个元素的列表中,您将查看所有 10 个元素,取最低的一个并将其附加到末尾。然后,您将查看前九个并取出其中最低的一个并将其附加到末尾。然后是前 8 个,依此类推,直到列表排序。

于 2012-05-09T02:03:15.557 回答
0

Collections.sort(List);

于 2012-05-09T01:59:56.320 回答