Made by Minseokism

Comparable & Comparator

Comparable

public interface Comparable<T>

public class ComparableTest {

    public static void main(String[] args) {
        Card[] cards = { new Card(5), new Card(4), new Card(9), new Card(1) };

        for (Card card : cards) {
            System.out.print(card); // result is 5 4 9 1
        }

        System.out.println();
        
        Arrays.sort(cards);

        for (Card card : cards) {
            System.out.print(card); // result is 1 4 5 9
        }
    }
}

class Card implements Comparable<Card> {
    private int number;

    public Card(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    @Override
    public int compareTo(Card card) {
        return this.number - card.number;
    }

    @Override
    public String toString() {
        return number + " ";
    }
}

Comparator

public interface Comparator<T>

public class ComparatorTest {

    public static void main(String[] args) {
        List<Card> cards = new ArrayList<>();
        cards.add(new Card(5));
        cards.add(new Card(4));
        cards.add(new Card(9));
        cards.add(new Card(1));
        
        for (Card card : cards) {
            System.out.print(card); // result is 5 4 9 1
        }

        System.out.println();

        Collections.sort(cards, new CardComparator());    // 1. Comparator 구현한 클래스 활용

        Collections.sort(cards, new Comparator<Card>() {  // 2. 익명 내부 클래스 활용

        @Override
        public int compare(Card card1, Card card2) {
            return card1.getNumber() - card2.getNumber();
        }

        });

        for (Card card : cards) {
            System.out.print(card); // result is 1 4 5 9
        }
    }
}

class Card {
    private int number;

    public Card(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    @Override
    public String toString() {
        return number + " ";
    }
}

class CardComparator implements Comparator<Card> {
    @Override
    public int compare(Card card1, Card card2) {
        return card1.getNumber() - card2.getNumber();
    }
}


Share this: