java - 如何在 Java 中对 ArrayList 中的对象中的元素进行排序

标签 java sorting arraylist

因此,在描述问题之前,先介绍一个场景。我创建了两个类,一个是实现类似功能的城市,另一个是作为城市子类的AncientCity。

City 有一个已实现的compareTo 方法,该方法可以比较City 的人口并返回某个整数作为结果。

AncientyCity也是如此,但它是与AncientCity的年龄进行比较的。

我创建了一个实用程序类并实现了两个通用方法 sort 和 printAll。

对于排序,我必须比较 City 或AncientCity 的元素(我们不知道这取决于我们在 main 方法中声明的内容),如果第一个元素恰好大于第二个元素,那么它会交换第二个到第一个,第一个到第二个。

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

还有其他方法可以按升序对它们进行排序吗?

顺便说一句,你不能使用 Collections.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;
                }
            }
        }
    }

最佳答案

您无法通过在方法中本地交换对象引用来交换值。我还建议您对 List 接口(interface)进行编程。我会推荐 > 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);
            }
        }
    }
}

关于java - 如何在 Java 中对 ArrayList 中的对象中的元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30678167/

相关文章:

java.lang.ClassNotFoundException : org. mysql.JDBC - 无法解决,添加了mysql连接器

java - 将 JCheckBox 添加到 JScrollPane

C-为什么结构数组的冒泡排序会跳过数组中的第一个元素?

java - 为堆栈实现迭代器

java - org.json.JSONObject 无法转换为 JSONArray

java - 如何将 ObjectProperty<Date> 转换为 ObjectProperty<LocalDate>

javascript - 如何在javascript中对对象列表的数组进行排序?

java - 从java中的数组中查找重复元素出现两次以上

java - 当ArrayList中存储多个数据类型时,ArrayList.get()的性能是否会受到影响?

java - 使用 Arrays.asList() 初始化列表的最佳方法是什么