1

ポイントを持つ配列があります:Point[] p = new Point[]

xでソートしてからyでソートしたい。意味、私が持っている場合

Point A = (1, 2)
Point B = (2, 1)
Point C = (1, 3)
Point D = (2, 2)

ソート後、次のようになります。[(1,2), (1,3), (2,1), (2,2)]

を使用しようとしましArrays.sort()たが、ポイントが比較できません。それを行う簡単な方法はありますか?

4

4 に答える 4

3

Arrays.sortカスタムで使用できますComparer<Point>

Arrays.sort(p, new Comparator<Point>() {
    int compare(Point a, Point b) {
        int xComp = Integer.compare(a.x, b.x);
        if(xComp == 0)
            return Integer.compare(a.y, b.y);
        else
            return xComp;
    }
});

補足:

  • Pointオブジェクトの一部が である可能性がある場合nullは、これを で処理する必要がありますcompareTo
  • PointAWT ポイントではなく、独自のクラスである場合は、実装させた方がよいでしょうComparable
于 2013-05-01T12:15:18.650 に答える
1

インターフェイスをPoint実装し、必要に応じてComparableそのメソッドをオーバーライドしcompareToます。

    @Override
    public int compareTo(Point p) {
      if (this.x != p.x) {
        return Integer.compareTo(this.x, p.x);
      } else {
        return Integer.compareTo(this.y, p.y);
      }
    }

詳細: http://javarevisited.blogspot.com/2012/01/how-to-sort-arraylist-in-java-example.html#ixzz2S2i9k5V3

Pointこれには、クラスの編集が必要です。それが不可能な場合は、代替ソリューションの他の回答を参照してください。

于 2013-05-01T12:13:58.147 に答える