为2个arraylist排序,每个arraylist代表x和y坐标

时间:2017-10-11 17:31:29

标签: java sorting arraylist

我有2个arraylists

xVal:[9 8 6 5 4 3 2 -10]
yVal:[3 6 5 7 9 1 8 10]

我想按升序对xVal进行排序,并且在xVal排序时也要移动相应的yVal。

结果将是

xVal:[ - 10 2 3 4 5 6 8 9]
yVal:[10 8 1 9 7 5 6 3]

感谢您抽出时间解释一下

1 个答案:

答案 0 :(得分:1)

我建议您在此处使用不同的数据结构。您可以为x / y坐标创建自己的数据类型(POJO),然后您可以在" normal"中对列表进行排序。 Java方式。

这是您可以使用的POJO:

public class Coordinate {
    public int x;
    public int y;

    public Coordinate(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "[" + x + ", " + y + "] ";
    }
}

初始化列表的主程序,根据X坐标对coordinades进行排序,然后显示结果:

public class SortDemo {
    public static void main(String[] args) {
        // init the list
        List<Coordinate> coordinates = new ArrayList<>();
        coordinates.add(new Coordinate(9, 3));
        coordinates.add(new Coordinate(8, 6));
        coordinates.add(new Coordinate(6, 5));
        coordinates.add(new Coordinate(5, 7));
        coordinates.add(new Coordinate(4, 9));
        coordinates.add(new Coordinate(3, 1));
        coordinates.add(new Coordinate(2, 8));
        coordinates.add(new Coordinate(-10, 10));

        // sort
        Collections.sort(coordinates, (coordinate1, coordinate2) -> coordinate1.x - coordinate2.x);

        // display the content of the sorted list
        System.out.println(coordinates);
    }
}

结果:

[-10, 10] , [2, 8] , [3, 1] , [4, 9] , [5, 7] , [6, 5] , [8, 6] , [9, 3]

修改

toString():

  

返回对象的字符串表示形式。一般来说,   toString方法返回一个&#34;文本表示&#34;的字符串。这个   宾语。结果应该是简洁但信息丰富的表示   一个人很容易阅读。建议所有人   子类重写此方法。

例如:

Coordinate coordinate = new Coordinate(-10, 10);
System.out.println(coordinate);

OR

Coordinate coordinate = new Coordinate(-10, 10);
System.out.println(coordinate.toString());

您可以在IDE中以DEBUG模式进行检查。

<强>排序

上面提到的简短形式的集合排序与此相同:

class MySort implements Comparator<Student> {
    public int compare(Coordinate coordinate1, Coordinate coordinate2) {
        return coordinate1.x - coordinate2.x;
    }
}

// how to use
Collections.sort(coordinates, new MySort());

API doc of compare()