集合day01笔记

集合概述

集合 : 一种长度可以变化的容器!!
    
学习容器的三步走:
	1. 如何创建容器
    2. 增删改查四类功能
    3. 遍历容器
        
集合的分类 : 单列 和 双列 
    
集合的特点:
1. 长度可变  --> 好处
2. 只能存储引用数据类型的元素 -> 只能存对象!  -> 弊端 : 弊端被解决了    
单列集合的体系结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0qPEb9Ri-1640680189856)(.assets/image-20211105112018847.png)]

Collection接口
Collection<E>接口 : 单列集合的根节点 --> 接口不可以创建对象!!
    
创建对象
    Collection<E> 集合名 = new 实现类对象<E>();
	格式解释:
		Collection : 父接口
        集合名 : 父引用
        <E> : 泛型  -> 一种说不清楚的类型
            作用: 约束集合中元素的数据类型的
            注意: 泛型只可能是一种引用数据类型
            使用: 在创建集合的时候拿具体的引用数据类型类名替换E即可   
        = : 赋值 --> 赋的是地址值
        new : 创建对象
        实现类对象 : 任意的Collection的实现类
        <E> : 必须和前面的E类型一致 (JDK7之后就可以省略后面的E的编写)  
        () :  无参构造    
    例如:
        Collection<String> coll = new ArrayList<String>();
        Collection<Student> coll = new HashSet<Student>();    
		Collection<int> coll = new HashSet<int>();  -> 错误  
增删改查
    增 : add
    	boolean add(E e)  : 根据集合的泛型类型添加固定类型的元素,并返回添加是否成功
    删 :
		boolean remove(Object o) : 按照传入元素的值删除集合中的该元素,并返回删除是否成功
        void clear() : 清除集合中所有的元素    
    改 :Collection<E>集合中没有set方法,因为Collection集合还没有索引
    查 :Collection<E>集合中没有get方法,因为Collection集合还没有索引
        int size(): 获取集合中元素的个数
            
        boolean contains(Object o) : 查询传入的元素是否包含于集合中
     	boolean isEmpty()  : 查询集合是否为空集合
遍历    
    1. Object[] toArray() : 转数组
Iterator迭代器
Iterator<E>迭代器 : 专门用来遍历集合的工具 -> 更为面向对象的方式遍历集合
    
使用步骤:
	1. 找调羹
        Colletion<E>接口 : Iterator<E> iterator()
    2. 看一眼
        Iterator<E>接口 : boolean hasNext(): 判断是否有下一个元素
    3. 舀起来
        Iterator<E>接口 : E next(): 获取下一个元素    
底层原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVKTwA7F-1640680189858)(assets/image-20211105144704828.png)]

并发修改异常
    ConcurrentModificationException : 并发修改异常
        原因: 在创建了迭代器对象之后,使用集合对象对集合元素进行修改
        解决办法:
            1. 在迭代器遍历集合的时候不要使用集合对象对原集合进行修改
            2. 请使用 ListIterator 列表迭代器
增强for
//使用前提是,一个类或者它的父类或者父接口实现了 Iterable<E> 接口

单列集合和数组都可以用增强for!!
    
增强for的格式:
	for(泛型 变量名 : 集合名/数组){
        //对变量名进行操作 --> 变量名就是在接收集合/数组中的元素
    }

增强for的底层是: 迭代器
    所以不要在增强for中对集合内容进行修改
包装类型和自动装箱/自动拆箱
集合只能存储对象,因为泛型E 只能是一个引用数据类型

    包装类 : 基本数据类型对应的引用数据类型
        byte        Byte
        short       Short
        int         Integer
        long        Long
        float       Float
        double      Double
        char        Character
        boolean     Boolean

    我们在往集合中存储基本数据类型的时候,把泛型写成对应的基本数据类型包装类即可!


    自动装箱和自动拆箱 :
        自动装箱: 基本数据类型数值 ---> 对应包装类型的对象
            例如: Integer i = 100;
            真实代码 : Integer i = Integer.valueOf(100);
        自动拆箱: 对应包装类型的对象 ---> 基本数据类型数值
            例如: int num = i;
            真实代码 : int num = i.intValue();
包装类中的解析功能
包装类中的解析功能 : 字符串类型的基本数据类型值转换成对应的基本数据类型值;
	字符串类型的基本数据类型值 : "100"  "true"  "13.14"
        
包装类中的解析方法:
	static xxxx parseXxxx(字符串类型的基本数据类型值); //除了Character没有
		xxxx: 对应基本数据类型

例如 Integer :  static int parseInt(String num)
List接口
List<E>接口 : 元素有索引,元素存取有序,元素可以重复的集合的根节点 (长度可变,只能存对象)
    
创建对象:
	List<E> 集合名 = new 实现类<>();

增删改查四类功能:: add
    	boolean add(E e)  : 依次添加元素,永远返回true:
		boolean remove(Object o) : 按照传入元素的值删除集合中的该元素,并返回删除是否成功
        void clear() : 清除集合中所有的元素    
    查 :   
        int size(): 获取集合中元素的个数
            
        boolean contains(Object o) : 查询传入的元素是否包含于集合中
     	boolean isEmpty()  : 查询集合是否为空集合
    ------------------特有的--------------------------:  void add(int index, E element)  : 在指定索引位置插入元素       
    删 :  E remove(int index) : 删除指定索引位置的元素,并返回被删除的元素
    改 :  E set(int index,E element) :修改指定索引位置的元素,并返回被修改的元素 
    查 :  E get(int index) : 获取指定索引位置的元素  
        
遍历:
	//遍历1: 转数组
        Object[] objs = list.toArray();
        for (Object name : objs) {
            System.out.println("name = " + name);
        }
        System.out.println("---------------");
        //遍历2 : 普通迭代器
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String name = it.next();
            System.out.println("name = " + name);
        }
        System.out.println("---------------");
        //遍历3 : 增强for
        for (String name : list) {
            System.out.println("name = " + name);
        }
        System.out.println("---------------");
        //遍历4 : 普通for循环
        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i);
            System.out.println("name = " + name);
        }
        System.out.println("---------------");
        //遍历5 : 列表迭代器 ListIterator<E> listIterator()
        ListIterator<String> lit = list.listIterator();
        while(lit.hasNext()){
            String name = lit.next();
            System.out.println("name = " + name);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值