【问题标题】:Sorting an ArrayList object populated with custom objects with two data fields each对填充有自定义对象的 ArrayList 对象进行排序,每个对象具有两个数据字段
【发布时间】:2018-07-10 00:41:39
【问题描述】:

遇到排序 ArrayList 的问题。我确信答案很简单,而且我一直忽略了一些东西,但过去几个小时我一直在努力解决这个问题,只需要别人的眼睛。

这是一个实验室项目,需要我们制作 3 个自定义类; Applications.java、Rectangle.java 和 RectangleList.java,我必须对 ArratList 进行排序,该 ArratList 包含具有长度和宽度数据字段的 Rectangle 对象。

顺序是 (W1, L1) > (W2, L2) 当且仅当 [(W1 > W2) 或 (W1 = W2 and L1 > L2)

我不确定需要查看哪些代码来寻求帮助,但我知道我应该使用 for 循环并且没有外部预制方法进行排序。我应该通过每个索引运行一个 for 循环并将该索引与其他索引进行比较,然后切换值。我当前的代码要么不执行任何操作(不进行排序),要么引发重复。只是发生了很多事情,我已经删除了所有内容并重新开始了很多次。不知道从哪里开始,我已经不知道如何思考这个问题了。

谢谢,请告诉我你需要看什么,我会尝试发布它。

编辑说明:我们不允许使用比较器或可比较或任何其他我还不知道的比较方法。

/////////////////////////////////////// ////////////////////////// 我想通了!

for(int index = 0; index < (list.boxes.size()-1); index++){
    minIndex = index;

    for(int index2 = index+1; index2 < list.boxes.size(); index2++){
        if((list.boxes.get(minIndex).getLength() > list.boxes.get(index2).getLength()) || (list.boxes.get(minIndex).getLength() == list.boxes.get(index2).getLength() && list.boxes.get(minIndex).getWidth() > list.boxes.get(index2).getWidth())){
            minIndex = index2;
        }
    }
    list.boxes.set(index, list.boxes.set(minIndex, list.boxes.get(index)));
}

【问题讨论】:

  • 您可能想使用ComparableComaparator
  • 不允许。 =(
  • 除非您愿意编写自己的排序和比较算法,否则自定义 Comparator 是通用解决方案
  • 我们必须编写自己的排序和比较算法,这就是实验室,这就是我所坚持的。
  • 很抱歉,该分配是故意的,因此您不会使用任何现有的 Java 库。我的建议是搜索不同排序算法的示例 Java 代码并根据您自己的情况对其进行修改。为了简单起见,首先让它只使用一个字段,然后添加第二个。

标签: java sorting object arraylist methods


【解决方案1】:

我认为比较器可以帮助你:

Collections.sort(rectList, new Comparator<Rectangle>() {
    @Override
    public int compare(Rectangle rect1, Rectangle rect2) {
        if(rect1.width > rect2.width)
            return -1;
        else if(rect1.width == rect2.width && rect1.length > rect2.length)
            return -1;
        else if(rect1.width == rect2.width && rect1.length == rect2.length)
            return 0;
        else
            return 1;
    }
});

如果您使用的是 Java8,则可以使用 Lambda 表达式来使代码更小。

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2018-10-29
    相关资源
    最近更新 更多