JAVA之Collections集合
一、概念:
1、集合是接口,Collections是所有集合接口的父接口,它的子接口常用的有:Set、List、Map
2、Collections集合接口:
- 没有约束元素是否重复
- 定义了集合运算等基本行为
- 是集合的根接口
3、Set接口(对应于python中的set集合):
- 继承于Collections
- 元素不允许重复
- 元素无序排列
4、List接口(对应于python中的list列表):
- 继承于Collections
- 元素允许重复
- 元素有序排列,元素有索引号,索引号从0开始
5、Map接口(对应于python中的dict字典):
- 继承于Collections
- 元素允许重复
- key是关键字,value是集合元素
- 当key重复时,value会覆盖原来的
二、应用:
1、对集合里面的值进行排序:
使用Collections.sort();
- 泛型是什么,就按什么类型进行排序。
public class CollectionsDemo { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(23); list.add(24); list.add(-1); list.add(5); Collections.sort(list); //排序 System.out.println(list); //结果: //[-1, 5, 23, 24] List<String> list2 = new ArrayList<>(); list2.add("2"); list2.add("3"); list2.add("13"); list2.add("23"); Collections.sort(list2); System.out.println(list2); //结果: //[13, 2, 23, 3] //泛型是什么,就按什么类型进行排序。当泛型为String时,默认是按第一位的数值大小排序 } }
- 想要使用泛型时按照自己的规则进行排序,就要自己写比较器。
- 重写后,sort()方法中要传入两个变量:要排序的集合、比较器。
2、重写比较器的2种方式:
1)创建对象然后重写并实现接口里的方法:
public class CollectionsDemo { public static void main(String[] args) { List<String> list3 = new ArrayList<>(); list3.add("211"); list3.add("3"); list3.add("1133"); list3.add("23"); MyComarator mycomparator = new MyComarator(); Collections.sort(list3,mycomparator); System.out.println(list3); } } class MyComarator implements Comparator<String>{ //比较器是一个接口,需要实现接口。重写并实现接口里面的方法 @Override public int compare(String o1, String o2) { return o1.length()-o2.length();//根据字符串的长度进行比较; } } //结果: //[3, 23, 211, 1133]
2)使用匿名内部类重写比较器:
-
JAVA规范:一个.java文件中只写一个类,所以使用匿名内部类比较好
public class CollectionsDemo { public static void main(String[] args) { List<String> list3 = new ArrayList<>(); list3.add("211"); list3.add("3"); list3.add("1133"); list3.add("23"); Collections.sort(list3, new Comparator<String>() { //使用匿名内部类 @Override public int compare(String o1, String o2) { return o1.length()-o2.length(); //根据字符串的长度进行比较; } }); System.out.println(list3); //结果: //[3, 23, 211, 1133] } }
每天进步一点点,快乐生活多一点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· Cursor:一个让程序员“失业”的AI代码搭子
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· 重生之我是操作系统(七)----内存管理(上)
· .NET 阻止Windows关机以及阻止失败的一些原因