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]
    }
}    
复制代码

 

posted @   意如柳  阅读(910)  评论(0)    收藏  举报
编辑推荐:
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
阅读排行:
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· Cursor:一个让程序员“失业”的AI代码搭子
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· 重生之我是操作系统(七)----内存管理(上)
· .NET 阻止Windows关机以及阻止失败的一些原因
点击右上角即可分享
微信分享提示