《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》查找相关笔记
评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步
如果对作者发布的内容感兴趣,可点击下方关注公众号 钰娘娘知识汇总 查看更多作者文章哦!