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<>();
// 泛型类型声明可以省略

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

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

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

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

集合遍历
  • 迭代器遍历

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

在这里插入图片描述

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

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

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

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

  • lambda 表达式遍历

    JDK 8 开始有lambda表达式

在这里插入图片描述

Collection<String>lists = new ArrayList<>();

lists.forEach(new Consumer<String>(){
   @Override
    public void accept(String s){
        System.out.println(s);
    }
    
});
lists.forEach(s->{ // 只有一条语句可以省略{}
    System.out.println(s);
});

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

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

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

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

  • 红黑树

    自平衡的二叉查找树

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      public interface Data<E> {}
      

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

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

泛型通配符
  • ? 可以在使用泛型时代表一切类型
  • E T K V是在定义泛型时使用的
泛型上下限
  • ? extends Car --> ? 必须是Car 或者其子类, 泛型上限
  • ? super Car --> ? 必须是Car 或者其父类, 泛型下限
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值