使用Java中Collections工具类和Comparator比较器使用
2023-02-18 16:35:56 时间
Collections工具类
介绍
- Collections是单列集合的工具类,里面所有的方法都是静态方法,可以对集合进行一些操作。
常用方法(常用方法)
方法 | 说明 |
---|---|
static void shuffle(List<?> list) | 随机打乱集合元素的顺序 |
static void sort(List list) | 集合的排序(从小到大) |
static void sort(List list,Comparator<? super T> ) | 按照指定的方式排序 |
代码示例
package com.itheima_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
//创建集合
List<Integer> list = new ArrayList<>();
list.add(11);
list.add(33);
list.add(66);
list.add(123);
list.add(9);
//static void shuffle(List<?> list)
//随机打乱集合元素的顺序
Collections.shuffle(list);
System.out.println("打乱顺序:" + list);
//static <T> void sort(List<T> list)
//集合的排序(从小到大)
Collections.sort(list);
System.out.println("排序之后:" + list);
}
}
字符串的比较规则
package com.itheima_01;
import java.util.ArrayList;
import java.util.Collections;
public class Test02 {
public static void main(String[] args) {
//创建集合
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("def");
list.add("abcd");
list.add("123");
list.add("a12");
list.add("金泫雅");
//排序
Collections.sort(list);
//从小到大
/*
字符串排序规则:
从前往后一个一个判断字母的字符值
*/
System.out.println(list);
System.out.println('a'+0); //97
System.out.println('金'+0); //26611
}
}
Comparator比较器
compare方法的解释
参数:
o1是要比较的元素
o2是已经排好序的元素
返回值:
如果返回的是一个正数,会把元素放在后面
如果返回的是一个负数,会把元素放在前面
如果返回的是一个零,认为元素大小相同,不移动元素
整数类型从大到小排列
package com.itheima_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/*
匿名内部类的作用是简化代码,不用单独定义子类
格式:
new 父类/接口(){
重写方法;
};
*/
public class Test03 {
public static void main(String[] args) {
//创建集合
List<Integer> list = new ArrayList<>();
list.add(11);
list.add(33);
list.add(56);
list.add(123);
list.add(9);
//排序
Collections.sort(list,new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//return o1 - o2; //从小到大
//return o2 - o1; //从大到小
return -1;
}
});
System.out.println(list);
}
}
自定义类型按照年龄从小到大排列
package com.itheima_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Test04 {
public static void main(String[] args) {
//创建集合
ArrayList<Student> list = new ArrayList<>();
//添加
list.add(new Student("迪丽热巴",38));
list.add(new Student("金泫雅",23));
list.add(new Student("唐嫣",28));
//排序
//存储的是学生对象,学生对象没有排序比较规则
//Collections.sort(list);
//给出排序规则
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
//要求:年龄从小到大排序
return o1.getAge() - o2.getAge();
}
});
//打印
System.out.println(list);
}
}
自定义类型按照年龄从小到大排列,如果年龄相同,姓名短的在前,姓名长的在后
package com.itheima_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Test05 {
public static void main(String[] args) {
//创建集合
ArrayList<Student> list = new ArrayList<>();
//添加元素
list.add(new Student("唐嫣",38));
list.add(new Student("金泫雅",23));
list.add(new Student("迪丽热巴",28));
list.add(new Student("貂蝉",28));
list.add(new Student("杨幂",28));
//排序
//按照年龄从小到大排列,如果年龄相同,姓名短的在前,姓名长的在后
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
if(o1.getAge() == o2.getAge()){
//年龄相同
//比较姓名从短到长
return o1.getName().length() - o2.getName().length();
}else{
//年龄不相同
//年龄从小到大
return o1.getAge() - o2.getAge();
}
}
});
//打印
System.out.println(list);
}
}
相关文章
- 【架构师(第十五篇)】脚手架之创建项目模板开发
- 【架构师(第十六篇)】脚手架之创建项目模板的下载与更新
- 【架构师(第十八篇)】脚手架之项目模板的安装
- 【架构师(第十九篇)】脚手架之组件库模板开发
- 【架构师(第二十篇)】脚手架之自定义模板及第一阶段总结
- 【架构师(第二十一篇)】编辑器开发之需求分析和架构设计
- 【架构师(第二十二篇)】编辑器开发之项目整体搭建
- 【架构师(第二十三篇)】编辑器开发之画布区域组件的渲染
- 【架构师(第二十四篇)】编辑器开发之添加模版到画布
- Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序
- 我以订披萨为例,给女朋友详细讲了Java设计模式的3种工厂模式
- 【架构师(第二十五篇)】编辑器开发之属性编辑区域表单渲染
- 【架构师(第二十六篇)】编辑器开发之属性编辑同步渲染
- 2021年度“CCF-腾讯犀牛鸟基金”发布结题评优结果
- 【架构师(第二十七篇)】前端单元测试框架 Jest 基础知识入门
- 太空噗|重燃太空热潮!与噗噗星人一同探索星海浪漫
- 算法工程师深度解构ChatGPT技术
- 【架构师(第二十八篇)】 测试工具 Vue-Test-Utils 基础语法
- 【架构师(第二十九篇)】Vue-Test-Utils 触发事件和异步请求
- 【架构师(第三十篇)】Vue-Test-Utils 全局组件和第三方库 vuex | vue-router