当前位置: 首页 > 知识库问答 >
问题:

在JAVA中如何按两个标准排序?

宿鹏程
2023-03-14

我有一个ArrayList,其中包含下一个数据:coordX、coordY、长度、位置(位置可以有3种类型:垂直、水平或1x1)。使用插入方法,我按长度对其进行降序排序。如果长度等于具有水平位置的长度值,我如何给予优先级。对于给定的输入:

(1;0)  ,  length = 2  ,  position - vertical
(1;6)  ,  length = 4  ,  position - horizontal
(3;4)  ,  length = 3  ,  position - horizontal
(3;6)  ,  length = 1  ,  position - 1x1
(4;0)  ,  length = 1  ,  position - 1x1
(5;3)  ,  length = 2  ,  position - horizontal
(6;7)  ,  length = 2  ,  position - vertical
(7;5)  ,  length = 2  ,  position - horizontal

输出应为:

(1;6)  ,  length = 4  ,  position - horizontal
(3;4)  ,  length = 3  ,  position - horizontal
(5;3)  ,  length = 2  ,  position - horizontal
(7;5)  ,  length = 2  ,  position - horizontal
(1;0)  ,  length = 2  ,  position - vertical
(6;7)  ,  length = 2  ,  position - vertical
(3;6)  ,  length = 1  ,  position - 1x1
(4;0)  ,  length = 1  ,  position - 1x1

这就是我目前的情况:

public static void insertionSort(ArrayList<sort> srt) {
        int i,j;
        for (i = 1; i < srt.size(); i++) {
            sort tmp = srt.get(i);
            j = i;
            while ((j > 0) && (srt.get(j - 1).length< tmp.length)) {
                srt.set(j, srt.get(j - 1));
                j--;
            }
            srt.set(j, tmp);
        }
        for(sort e : srt) {
            System.out.println("("+e.coordX+";"+e.coordY+")"+"  ,  length= "+e.length+"  ,  position - "+e.pozitie);
        }

}

这部分代码只负责按长度排序。

共有1个答案

冯奇思
2023-03-14

尝试以下方法:

你需要先检查长度,然后如果它们相等,检查位置。

            while ((j > 0) && (srt.get(j - 1).length < tmp.length
                    || (srt.get(j - 1).length == tmp.length
                            && srt.get(j - 1).position
                                    .compareTo(tmp.position) > 0))) {
                srt.set(j, srt.get(j - 1));
                j--;
            }
 类似资料:
  • 问题内容: 我有很多对象。 如何按名称和年龄先后按字母顺序对该数组排序? 您将使用哪种算法? 问题答案: 你可以使用以下方法: 现在按名称排序,然后按年龄排序。 “从字典上比较两个字符串”-来自docs。 是本机库中的静态方法。它会进行实际的排序,你只需要提供一个即可定义应该如何比较列表中的两个元素:这是通过提供你自己的方法实现来实现的。

  • 我有对象数组。 如何按名称和年龄按字母顺序对该数组进行排序? 你会使用哪种算法?

  • 我被一个简单的问题困住了;如何在ed实体上调用。基本上,我正试图通过JPA标准实现以下目标: 我有以下几点: 如何通过d.name,c.name使用来实现

  • 下一个示例比较器将对不包含任何双名的对象的其余集合进行排序: 第二个比较器正确地根据对象的年龄值对其进行排序,但它允许使用双重名称,我不明白这一点,因为外部的if-语句已经检查了两个对象的名称是否相等。为什么会这样?

  • 我有一个我正在制作的纸牌游戏的高分数组列表。对于这个arraylist可以存储的分数数量需要有一个有限的限制,系统的用户可以定义这个限制(假设现在是10个)。arraylist中的对象中的字段是玩家的名称(字符串)、他们的分数(int)和玩家的(几乎)唯一的ID(Long,System.CurrentTimeMillis())。arraylist应该按分数排序,其中分数最低的是最好的。但是,如果a

  • 要按升序对其进行int排序,我可以使用: 我怎样才能按照递减的顺序来做呢?