> 文档中心 > 《Java 核心技术 卷1》 笔记 第13章 集合(5)比较器与队列

《Java 核心技术 卷1》 笔记 第13章 集合(5)比较器与队列


 13.2.5 对象的比较

自然排序

排序时加入比较器进行比较,优点是灵活性强,适用于临时需要排序的情况

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

public class Main {    public static void main(String[] args) { List list = new ArrayList(); list.add(new A(1,4)); list.add(new A(2,3)); System.out.println(list);  list.sort(new Comparator() {     @Override     public int compare(A o1, A o2) {  return o2.a-o1.a;     } });  System.out.println(list);    } } class A{    int a;    int b;    public A(int a, int b){ this.a = a; this.b = b;    }     @Override    public String toString() { return "{"+a+","+b+"}";    }}

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

运行结果:

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

小总结:

compare()返回负数时,左侧对象排左边;返回正数时,左侧对象排右边

定制排序

对象的排序一定按照某一规律进行时,则一定使用定制排序,它的好处是规范性强,节省代码量,每次集合都会自动使用默认的定制排序。

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

import java.util.*; public class Main {    public static void main(String[] args) { List list = new ArrayList(); list.add(new A(1,4)); list.add(new A(2,3)); System.out.println(list);  Collections.sort(list);  System.out.println(list);    } } class A implements Comparable{    int a;    int b;    public A(int a, int b){ this.a = a; this.b = b;    }     @Override    public String toString() { return "{"+a+","+b+"}";    }     @Override    public int compareTo(A o) { return o.a-a;    }}

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

运行情况:

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

小总结:

compareTo()返回负数时,当前对象排左边;返回正数时,当前对象排右边

 13.2.6 队列与双端队列

队列:可以在尾部添加,头部删除的顺序表(链表)

双端队列:可以在两端添加删除的顺序表(链表),可一芬为二的看作两个队列:

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

import java.util.*; public class Main {    public static void main(String[] args) { Queue queue = new LinkedList();  //普通队列,尾部插入 for(int i = 1; i <= 50; i++){     queue.offer(i); } System.out.println("普通队列,尾部插入:"+queue);  //普通队列,头部删除 for(int i = 1; i <= 10; i++){     queue.poll(); } System.out.println("普通队列,头部删除:"+queue);   Deque deque = new LinkedList(); //双端队列头部插入 for(int i = 1;  i<= 25; i++){     deque.offerFirst(i); } System.out.println("双端队列,头部插入:"+deque);  //双端队列尾部插入 for(int i = 26; i <= 50; i++){     deque.offerLast(i); } System.out.println("双端队列,尾部插入:"+deque);  //双端队列头部删除 for(int i = 0; i < 10; i++){     deque.pollFirst(); } System.out.println("双端队列,头部删除:"+deque);  //双堆队列尾部删除 for(int i = 0; i < 10; i++){     deque.pollLast(); } System.out.println("双端队列,尾部删除:"+deque);     } }

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

运行结果:

相关内容:选择 《Java核心技术 卷1》查找相关笔记

评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步

如果对作者发布的内容感兴趣,可点击下方关注公众号 钰娘娘知识汇总 查看更多作者文章哦!

情感课堂