Java对象的比较_集合框架中PriorityQueue的比较方式

Java对象的比较

之前PriorityQueue 不报错就能offer,是因为Integer自己implements Comparable

4.集合框架中PriorityQueue的比较方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决

  • 法一:实现Comparable接口并重写compareTo方法

  • 法二:实现Comparator接口并重写compare方法

//方法1:
class Card implements Comparable<Card>{
    public int rank; // 数值
    public String suit; // 花色

    public Card(int rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "Card{" +
                "rank=" + rank +
                ", suit='" + suit + '\'' +
                '}';
    }

    @Override
    public int compareTo(Card o) {
        return this.rank-o.rank;//小堆
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Card card1 = new Card(1,"♦");
        Card card2 = new Card(2,"♦");
        Card card3 = new Card(3,"♦");

        PriorityQueue<Card> qu = new PriorityQueue<>();
        qu.offer(card2);
        qu.offer(card1);
        System.out.println(qu.poll());
        System.out.println(qu.poll());
    }
}

输出:
Card{rank=1, suit='♦'}
Card{rank=2, suit='♦'}
//方法2.
//!!!!!不实现 Comparable接口,不重写compareTo
//实现Comparator接口并重写compare方法
class Card2 {
    public int rank; // 数值
    public String suit; // 花色

    public Card2(int rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "Card{" +
                "rank=" + rank +
                ", suit='" + suit + '\'' +
                '}';
    }

}
public class TestDemo {

    /**
     * 测试2.
     * @param args
     */
    public static void main(String[] args) {
    	Card2 card1 = new Card2(1,"♦");
        Card2 card2 = new Card2(2,"♦");
        Card2 card3 = new Card2(3,"♦");
		PriorityQueue<Card2> qu2 = new PriorityQueue<>(new Comparator<Card2>() {
            @Override
            public int compare(Card2 o1, Card2 o2) {
                return o1.rank-o2.rank;//小堆
            }
        });
}
输出:[Card{rank=1, suit='♦'}, Card{rank=2, suit='♦'}, Card{rank=3, suit='♦'}]
//方法2   的另一种写法:
class RankComparator implements Comparator<Card2> {

    @Override
    public int compare(Card2 o1, Card2 o2) {
        return o1.rank - o2.rank;
    }
}

public class TestDemo {

    /**
     * 测试3.
     * @param args
     */
    public static void main(String[] args) {
        Card2 card1 = new Card2(1,"♦");
        Card2 card2 = new Card2(2,"♦");
        Card2 card3 = new Card2(3,"♦");
        PriorityQueue<Card2> qu2 = new PriorityQueue<>(new RankComparator());
        qu2.offer(card2);
        qu2.offer(card1);
        qu2.offer(card3);
        System.out.println(qu2);
    }
}


输出:[Card{rank=1, suit='♦'}, Card{rank=2, suit='♦'}, Card{rank=3, suit='♦'}]
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值