Collections与Comparator
学习集合框架,Collections与Comparator是非常重要的工具,在一些集合操作中运用广泛,下面是简易讲解:
Collections是一个类,容器的工具类,就如同Arrays是数组的工具类。
Collections的常用方法:
reverse | 反转 |
shuffle | 混淆 |
sort | 排序 |
swap | 交换 |
rotate | 滚动 |
synchronizedList | 线程安全化 |
方法实现样例:
具体实现代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class Main {
public static void main(String[] args) {List<Integer> list =new ArrayList<Integer>();for(int i=0;i<10;i++) {list.add(i);}System.out.println("原始的集合:"+list);Collections.rotate(list, 2);System.out.println("往后滚动2个单位后的集合:"+list);Collections.shuffle(list);System.out.println("打乱顺序后的集合:"+list);Collections.sort(list);System.out.println("排序后的集合:"+list);Collections.reverse(list);System.out.println("反转后的集合:"+list);Collections.swap(list, 0, 1);System.out.println("将第一个位置和第二个位置交换后的集合:"+list);List<Integer> slist=(List<Integer>) Collections.synchronizedList(list);System.out.println("将list转化为线程安全的slist,list与slist的值相同");System.out.println(slist);}
}
Comparator
假设Hero有三个属性 name,hp,damage
一个集合中放存放10个Hero,通过Collections.sort对这10个进行排序
那么到底是hp小的放前面?还是damage小的放前面?Collections.sort也无法确定
所以要指定到底按照哪种属性进行排序
这里就需要提供一个Comparator给定如何进行两个对象之间的大小比较。
我们批量生成一些Hero,随机的hp,damage,进行按damage排序:
我们先创建一个Hero类
public class Hero {public String name;public float hp;public int damage;public Hero() {}public Hero(String name) {this.name = name;}public String toString() {return "Hero [name=" + name + ", hp=" + hp + ", damage=" + damage + "]\r\n";}public Hero(String name, int hp, int damage) {this.name = name;this.hp = hp;this.damage = damage;}}
然后创建一个测试类
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;import charactor.Hero;public class TestCollection {public static void main(String[] args) {Random r =new Random();List<Hero> heros = new ArrayList<Hero>();for (int i = 0; i < 10; i++) {//通过随机值实例化hero的hp和damageheros.add(new Hero("hero "+ i, r.nextInt(100), r.nextInt(100)));}System.out.println("初始化后的集合:");System.out.println(heros);//直接调用sort会出现编译错误,因为Hero有各种属性//到底按照哪种属性进行比较,Collections也不知道,不确定,所以没法排//Collections.sort(heros);//引入Comparator,指定比较的算法Comparator<Hero> c = new Comparator<Hero>() {@Overridepublic int compare(Hero h1, Hero h2) {//按照hp进行排序if(h1.hp>=h2.hp)return 1; //正数表示h1比h2要大elsereturn -1;}};Collections.sort(heros,c);System.out.println("按照血量排序后的集合:");System.out.println(heros);}
}
可以看到集合是通过伤害大小排序的。
看懂以上的可以看看下面的例题
传智杯-志愿者问题(Collections+Comparator完成)_无忧#的博客-CSDN博客
Collections与Comparator相关推荐
- JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)
第2节 集合(下) 一.Set接口 java.util.Set 接口和 java.util.List接口一样,同样继承自 Collection接口,它与Collection接口中的方法基本一致,并没有 ...
- 【Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法
文章目录 在 Stream.sorted 中使用 在 Collections.sort 中使用 在 List.sort 中使用 在 Arrays.sort 中使用 参考文献 Comparator.re ...
- java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...
一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...
- 复习JavaFile类_递归_综合案例
复习File类_递归 主要内容 File类 递归 第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作, 这里需要注意 ...
- 如何在Java中对Collection对象进行排序?
排序集合的对象 (Sorting objects of the Collection) This concept is related to sorting and here we will see ...
- JDK源码(1)-阅读指引
说在最前面的话: 其实JDK源码的阅读,网上资料特别多,我阅读的最主要目的是自己学习,所以我读的可能不那么好,我的角度是从源码和源码对应的注释读起,顺便还能练练英语. 接下来准备对JDK的常见源码进行 ...
- 200个最常见的JAVA面试问题(附答案)
本文内容: 20个最常见的JAVA面试问题(附答案) 13个单例模式JAVA面试问题(附答案) 说说JVM和垃圾收集是如何工作的(附答案) 说说如何避免JAVA线程死锁(附答案) Java中HashS ...
- 超详细的Java面试题总结(三)之Java集合篇常见问题
系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 List,Set,Map三者的区别及总结 List:对付顺序的好帮手 Li ...
- Java集合sort()
Today we will look into Java Collections sort method. While working with Collections in java, more t ...
最新文章
- Java学习之Hello World 第一个小程序
- python网络安全宣传周_Python
- 【MM模块】Source Lists 货源清单
- DCMTK:dcmseg模块的辅助功能
- HttpURLConnection, Android访问网络,实用demo
- HashMap和ConcurrentHashMap
- 昇兴集团:搭建帆软报表系统,打破数据孤岛,工作效率提升5倍
- 自动化测试用例设计的原则
- Python面试题之如何用Python来发送邮件?
- maskrcnn ImportError: cannot import name ‘_C‘
- DPDK之KNI原理
- SYNwall:零配置物联网防火墙
- 服务器系统巡查登记表,信息设备巡检记录表
- www 53ff com劫持IE,广告网页图标常驻桌面,删了又来
- html网页加线条,「网站特效」html5 canvas粒子线条特效制作方法
- 教你怎么去apple developer center(苹果开发者中心)下载Xcode的dmg安装包
- 【应用笔记】APM32F4xx_ADC应用笔记
- 【翻译】LearnYouSomeErlangForGreatGood(一):导言
- codeforces1292C Xenon‘s Attack on the Gangs
- 2023第八届少儿模特明星盛典 福州赛区 初赛圆满收官
热门文章
- NeXT,NEXTSTEP,OPENSTEP,Cocoa,Cocoa Touch,GNUstep,xcode
- 2015年09月29日
- lm283_BP283X 最小输入输出压差和OVP电压的关系
- 5V的OVP过压保护IC,去掉不良率
- (总结)什么是HTML语义化
- qevent 事件的accept()和ignore()
- PyCharm使用cxfreeze的方法
- 化工机械基础试题及答案
- 如何用python可视化疫情风险区?地图标记位置信息:数据爬取+地址解析+可视化
- sklearn机器学习(六)逻辑回归实例乳腺癌检测