• java集合Collection(List)和泛型


    java集合Collection(List)和泛型

    活动地址:CSDN21天学习挑战赛

    • 集合大小不固定,可以动态变化,类型也可以选择不固定

    • 集合只能存储引用类型的数据

    集合类体系结构
    • Collection -> 接口

      元素是有序的,有索引

      • List -> 接口

        • ArrayList
        • LinkedList
      • Set -> 接口

        无序,不重复,无索引

        • HashSet --> LinkedHashSet

          HashSet 无序, LinkedHashSet 有序

        • TreeSet

          按照大小默认升序排序

    • Map

      键值对

    泛型

    集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型

    Collection<String> lists = new ArrayList<String>();
    Collection<String> lists = new ArrayList<>();
    // 泛型类型声明可以省略
    
    • 1
    • 2
    • 3

    集合和泛型只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象

    存储基本数据类型: 使用包装类

    Collection<Integer> lists = new ArrayList<>();
    // Double 
    
    • 1
    • 2
    Collection集合常用API

    Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的
    在这里插入图片描述

    集合遍历
    • 迭代器遍历

      Iterator, 迭代器是集合专用的遍历方式

    在这里插入图片描述

    .next() 取出当前位置的元素,并指向下一个

    Iterator<String> it = lists.iterator();
    while(it.hasNext()){
    	String element = it.next();
        System.out.println(element);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • foreach遍历

      for(元素数据类型 变量名 : 数组或者Collection集合){
          // ...
      }
      
      • 1
      • 2
      • 3

      可以遍历集合也可以遍历数组

    • lambda 表达式遍历

      JDK 8 开始有lambda表达式

    在这里插入图片描述

    Collection<String>lists = new ArrayList<>();
    
    lists.forEach(new Consumer<String>(){
       @Override
        public void accept(String s){
            System.out.println(s);
        }
        
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    lists.forEach(s->{ // 只有一条语句可以省略{}
        System.out.println(s);
    });
    
    • 1
    • 2
    • 3

    集合中存储的是元素对象的地址

    常见数据结构
    • 平衡二叉树

      在满足查找二叉树大大小规则下,让树尽可能矮小,提高查数据的性能

      任意节点的左右两个子树的高度差不超过1

    • 红黑树

      自平衡的二叉查找树

      • 每一个节点或是红色的,或是黑色的,根节点必须是黑色的
      • 如果一个节点是红色的,那么它的子节点必须是黑色的( 不能出现两个红色节点相连的情况 )
      • 对于每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
    List 系列集合
    • ArrayList, LinkedList : 有序,可重复,有索引

    • List 集合特有方法
      在这里插入图片描述

    • ArrayList 底层是基于数组实现的,查询元素快,增删相对较慢

      第一次创建集合并添加第一个元素时,在底层创建一个默认长度为10的数组

      List<String> list = new ArrayList();
      
      • 1
    • LinkedList 底层是基于双链表实现的,查询元素慢,增删首尾元素很快

      首尾操作特有API
      在这里插入图片描述

    泛型
    • 格式: < 数据类型> 可以在编译阶段约束操作的数据类型

    • 泛型只能支持引用数据类型

    • 集合体系的全部接口和实现类都是支持泛型的使用

    • 在编译阶段类型就能确定下来

    泛型的定义
    • 类后面–> 泛型类

      • 定义类的同时定义了泛型的类就是泛型类

      • 修饰符 class 类名 < 泛型变量> {}

        public class MyClass<T> {}
        
        • 1
      • 泛型变量T可以随便写为任意标识,常见: E T K V等

      • 编译阶段可以指定数据类型

    • 方法声明上 --> 泛型方法

      • 自定义方法的同时定义了泛型的方法就是泛型方法

      • 修饰符 < 泛型变量> 方法返回类型 方法名称(形参列表){}

        public <T> void show(T t){}
        
        • 1
    • 接口后面 --> 泛型接口

      • 修饰符 interface 接口名称 < 泛型变量> {}

        public interface Data<E> {}
        
        • 1

        泛型接口可以让实现类选择当前功能需要操作的数据类型

        实现类可以在实现接口的时候传入自己操作的数据类型,重写的方法都将是针对该类型的操作

    泛型通配符
    • ? 可以在使用泛型时代表一切类型
    • E T K V是在定义泛型时使用的
    泛型上下限
    • ? extends Car --> ? 必须是Car 或者其子类, 泛型上限
    • ? super Car --> ? 必须是Car 或者其父类, 泛型下限
  • 相关阅读:
    JVM 参数及调优
    深度学习-第T5周——运动鞋品牌识别
    网络编程day03(UDP中的connect函数、tftp)
    深度解析网络代理技术及其在网络安全和爬虫应用中的关键作用
    基础语言-第17天-正则表达式
    DBC配置SecOC属性
    Go 语言变量
    七天入门node.js(05)
    MySQL常用命令01
    【Spring Boot】分页查询
  • 原文地址:https://blog.csdn.net/first_bug/article/details/126445933