comparable

  • interface

  • ์ •๋ ฌ ์ˆ˜ํ–‰ ์‹œ์—, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

    • Integer, Double ์€ ์˜ค๋ฆ„ ์ฐจ์ˆœ ์ •๋ ฌ

    • String ์€ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”๊ฐ€?

  • ์ •๋ ฌํ•  ๊ฐ์ฒด ์— implements ๋ฅผ ํ†ตํ•ด, compareTo() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

  • ComparaTo() ์ž‘๋™๋ฐฉ๋ฒ•

    • ์Œ์ˆ˜, ๋˜๋Š” 0 ์ด๋ฉด ๊ฐ์ฒด์˜ ์ž๋ฆฌ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋ฉฐ, ์–‘์ˆ˜ ์ผ ๊ฒฝ์šฐ , ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด์™€ ์ž๋ฆฌ๊ฐ€ ๋ฐ”๋€๋‹ค.

    • ํ˜„์žฌ ๊ฐ์ฒด < ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด : ์Œ์ˆ˜ ๋ฆฌํ„ด... --> ํ˜„์žฌ๊ฐ์ฒด ์ž๋ฆฌ๊ฐ€ ์œ ์ง€๋œ๋‹ค.

    • ํ˜„์žฌ ๊ฐ์ฒด == ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด : 0 ๋ฆฌํ„ด.. --> ํ˜„์žฌ ๊ฐ์ฒด์˜ ์ž๋ฆฌ๊ฐ€ ์œ ์ง€๋œ๋‹ค

    • ํ˜„์žฌ ๊ฐ์ฒด > ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด : ์–‘์ˆ˜ ๋ฆฌํ„ด --> ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด์™€ ์ž๋ฆฌ๊ฐ€ ๋ฐ”๋€๋‹ค.

    • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ

      • Arrays.sort();

      • Collections.sort()

Arrays.sort vs Collections.sort

  • Arrays.sort์˜ ๊ฒฝ์šฐ

    • byte[], char[], double[]๋“ฑ Object Array์—์„œ ๋ฐฐ์—ด ์ •๋ ฌ์˜ ๊ฒฝ์šฐ TimSort(MergeSort + Insertion Sort) ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    • Primitive Array์—์„œ๋Š” Dual pivot + QuickSort(Quick Sort, Insertion Sort)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • Collections.sort์˜ ๊ฒฝ์šฐ

    • ArrayList, LinkedList, Vector ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ Arrays.sort๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


์˜ˆ์‹œ ์ฝ”๋“œ

class Point implements Comparable<Point> {
    int x, y;

    @Override
    public int compareTo(Point p) {
        if(this.x > p.x) {
            return 1; // x์— ๋Œ€ํ•ด์„œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ
        }
        else if(this.x == p.x) {
            if(this.y < p.y) { // y์— ๋Œ€ํ•ด์„œ๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ
                return 1;
            }
        }
        return -1;
    }
}

// main์—์„œ ์‚ฌ์šฉ๋ฒ•
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList);
  • x์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ, x์ขŒํ‘œ๊ฐ€ ๊ฐ™์œผ๋ฉด y์ขŒํ‘œ๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์ฝ”๋“œ

Last updated