如何从Java中的ArrayList中的对象中排序元素

时间:2015-06-06 01:52:21

标签: java sorting arraylist

所以在我描述问题之前,这是一个场景。我创建了两个类,一个实现可比较的城市和作为城市的子类的AncientCity。

City有一个已实施的compareTo方法,该方法比较城市的人口并返回某个整数。

与AncientyCity相同,但它与AncientCity的时代相比。

我创建了一个Utilities类,并实现了两种通用方法sort& printAll。

对于排序,我必须比较City或AncientCity的元素(我们不知道取决于我们在main方法中声明的内容)以及第一个元素是否恰好大于第二个元素,然后它交换第二个到第一个,第一个到第二个。

这是问题开始的地方,我无法通过排序方法按升序排列元素;我尝试过使用冒泡排序,但我无法让元素交换。

还有其他方法可以按升序排序吗?

顺便说一句,你不能使用Collections.sort(),这会破坏我的任务目的。

这是sort方法的一个片段(请记住我在继续比较City和/或AncientCity对象之前使用String类进行测试):

public static void sort(ArrayList<String> object){
        for(int i = 0; i < object.size(); i++){
            for(int j = 1; j < object.size(); j++ ){
                String a = object.get(i);
                String b = object.get(j);
                String tmp = null;
                if(a.compareTo(b) == 1){
                    tmp= b;
                    b = a;
                    a = tmp;
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

您无法通过在方法中本地交换对象引用来交换值。我还建议你编程到List界面。我建议> 0而不是== 1。您需要将j初始化为i+1,我会得到一次长度。像,

public static void sort(List<String> object) {
    int length = (object != null) ? object.size() : 0;
    for (int i = 0; i < length; i++) {
        for (int j = i + 1; j < length; j++) {
            String a = object.get(i);
            String b = object.get(j);
            if (a.compareTo(b) > 0) {
                object.set(j, a);
                object.set(i, b);
            }
        }
    }
}