学习集合框架,CollectionsComparator是非常重要的工具,在一些集合操作中运用广泛,下面是简易讲解:

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相关推荐

  1. JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)

    第2节 集合(下) 一.Set接口 java.util.Set 接口和 java.util.List接口一样,同样继承自 Collection接口,它与Collection接口中的方法基本一致,并没有 ...

  2. 【Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法

    文章目录 在 Stream.sorted 中使用 在 Collections.sort 中使用 在 List.sort 中使用 在 Arrays.sort 中使用 参考文献 Comparator.re ...

  3. java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...

    一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...

  4. 复习JavaFile类_递归_综合案例

    复习File类_递归 主要内容 File类 递归 第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作, 这里需要注意 ...

  5. 如何在Java中对Collection对象进行排序?

    排序集合的对象 (Sorting objects of the Collection) This concept is related to sorting and here we will see ...

  6. JDK源码(1)-阅读指引

    说在最前面的话: 其实JDK源码的阅读,网上资料特别多,我阅读的最主要目的是自己学习,所以我读的可能不那么好,我的角度是从源码和源码对应的注释读起,顺便还能练练英语. 接下来准备对JDK的常见源码进行 ...

  7. 200个最常见的JAVA面试问题(附答案)

    本文内容: 20个最常见的JAVA面试问题(附答案) 13个单例模式JAVA面试问题(附答案) 说说JVM和垃圾收集是如何工作的(附答案) 说说如何避免JAVA线程死锁(附答案) Java中HashS ...

  8. 超详细的Java面试题总结(三)之Java集合篇常见问题

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 List,Set,Map三者的区别及总结 List:对付顺序的好帮手 Li ...

  9. Java集合sort()

    Today we will look into Java Collections sort method. While working with Collections in java, more t ...

最新文章

  1. Java学习之Hello World 第一个小程序
  2. python网络安全宣传周_Python
  3. 【MM模块】Source Lists 货源清单
  4. DCMTK:dcmseg模块的辅助功能
  5. HttpURLConnection, Android访问网络,实用demo
  6. HashMap和ConcurrentHashMap
  7. 昇兴集团:搭建帆软报表系统,打破数据孤岛,工作效率提升5倍
  8. 自动化测试用例设计的原则
  9. Python面试题之如何用Python来发送邮件?
  10. maskrcnn ImportError: cannot import name ‘_C‘
  11. DPDK之KNI原理
  12. SYNwall:零配置物联网防火墙
  13. 服务器系统巡查登记表,信息设备巡检记录表
  14. www 53ff com劫持IE,广告网页图标常驻桌面,删了又来
  15. html网页加线条,「网站特效」html5 canvas粒子线条特效制作方法
  16. 教你怎么去apple developer center(苹果开发者中心)下载Xcode的dmg安装包
  17. 【应用笔记】APM32F4xx_ADC应用笔记
  18. 【翻译】LearnYouSomeErlangForGreatGood(一):导言
  19. codeforces1292C Xenon‘s Attack on the Gangs
  20. 2023第八届少儿模特明星盛典 福州赛区 初赛圆满收官

热门文章

  1. NeXT,NEXTSTEP,OPENSTEP,Cocoa,Cocoa Touch,GNUstep,xcode
  2. 2015年09月29日
  3. lm283_BP283X 最小输入输出压差和OVP电压的关系
  4. 5V的OVP过压保护IC,去掉不良率
  5. (总结)什么是HTML语义化
  6. qevent 事件的accept()和ignore()
  7. PyCharm使用cxfreeze的方法
  8. 化工机械基础试题及答案
  9. 如何用python可视化疫情风险区?地图标记位置信息:数据爬取+地址解析+可视化
  10. sklearn机器学习(六)逻辑回归实例乳腺癌检测