zoukankan      html  css  js  c++  java
  • 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]
        }
    }    
  • 相关阅读:
    序列化和反序列化&持久化
    基于qiankun微前端的部署方案
    【MySQL】Explain执行计划 type类型说明
    【ElasticSearch】index read-only
    【MybatisPlus】Wrappers条件构造器构造or条件查询
    【布隆过滤器】基于Resisson的实现的布隆过滤器
    Nacos源码分析(三): 心跳设计
    Nacos源码分析(二):服务端和客户端实例注册
    Nacos源码分析(一): Nacos源码环境搭建
    【linux】如何在linux中查找文件、进程
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/JAVA.html
Copyright © 2011-2022 走看看