[ 集合篇·上 ] 基于B站韩顺平老师零基础Java教程的学习笔记7

写在最前:由于集合的篇幅和难度略大
(数据结构学的太烂了,甚至想先补一下数据结构再来听…但那就更要鸽好久了)
最终决定分三部分来写了,后两个可能要鸽一段时间了
五月事情似乎有点多…要准备期中考试还要备考六级还有个旅行计划,故而后两篇还有欠着的包装类得蛮久了可能…

集合篇·上:Collection接口和List接口
集合篇·中:Set接口
集合篇·下:Map接口

集合

  • 难度说明:单纯使用不难,难在1. 理解底层机制 2. 看源代码 3. 分析每种集合在不同场景下的应用情况
  • 集合对比数组的优势在于:
    1. 集合可以动态保存任意多个对象,甚至数据类型也可以不同,使用方便
    2. 提供了一系列方便的操作对象的方法:add,remove,set,get等
    3. 使用集合添加删除新元素使得代码变得简洁

集合框架体系

  • 集合主要分两组:单列集合(单个对象/单个元素),双列集合(往往是键值对)
  • Collection接口的两个重要的子接口:List,Set,它们的实现子类都是单列集合
  • Map接口的实现子类都是双列集合,存放的K-V
  • 在这里插入图片描述

Collection接口

Collection接口实现类的特点

  • public interface Collection <E> extends Iterable<E>
    1. collection实现子类可以存放多个元素,每个元素可以是Object
    2. 有些collection的实现类可以存放重复的元素,有些不可以
    3. 有些collection的实现类,有的是有序(存放的顺序和取出来的是一致的)的(List),有些不是有序(Set)
    4. collection接口没有直接的实现子类,而是通过它的子接口List和Set实现的

Collection接口实现类的常用方法

  1. add:添加单个元素
    list.add(10);
    //其本质相当于:
    //Integer(10);
    
  2. remove:删除指定元素
    list.remove(int index)//删除第index个元素
    list.remove("jack")//指定删除某个元素
    
  3. contains:查找元素是否存在//返回一个布尔值
  4. size:获取元素个数
  5. isEmpty:判断是否为空
  6. clear:清空
  7. addAll:添加多个元素//甚至可以传入一个集合,只要是实现了Collection接口的类的对象都可以传进去
  8. containsAll:查找多个元素是否都存在

Collection接口遍历元素方式 1 -迭代器Iterator

  • 基本介绍:
    1. Iterator对象成为迭代器,主要用于遍历Collection集合中的元素
    2. 所有实现了Collection接口的集合类都有一个iterator()方法,用来返回一个实现了Iterator接口的对象,即可返回一个迭代器
    3. Iterator仅用于集合遍历,本身并不存放对象
    4. 迭代器的实现原理:
    • 在这里插入图片描述

    • 提示:在调用iterator.next()之前必须要调用iterator.hasNext()方法检测以下,若不调用,且下一条记录无效,直接调用iterator.next()会报NoSuchElementException异常

  • 迭代器的使用方法详解
    1.先得到col(col是一个集合)对应的迭代器
    所有实现了Collection接口的子类都必须去实现iteratpr()方法:
    Iterator iterator = col.iterator();
    2. 使用while循环遍历
    快捷键生成while:itit + 回车
     while(iterator.hasNext())
     //判断集合中是否还有数据【见上面的迭代器的实现原理】
     Object obj = iterator.next();
     //有这个数据,就用Object类型返回下一个元素
     //注意此时的obj虽然编译类型是Object,但是运行类型还是它的类(Book)【运行类型取决于你真正存放的是什么类型】
     //本质上还是动态绑定机制
    
    1. 当退出while循环后,iterator此时指向了最后一个元素,此时继续取下一个iterator.next(),那么就会报错NoSuchElementException异常
    2. 如果希望再次遍历,需要重置迭代器
      iterator = col.iterator();
      //重置迭代器,然后下面继续while循环

Collection接口遍历元素方式 2 -for循环增强

  • 基本介绍:
    1. 增强for循环,可以代替iterator迭代器,特点:增强for循环就是简化版的iterator,两者本质一样,只能用于遍历集合或者数组
    2. 基本语法:
    for(元素类型 元素名:集合名或数组名){
     访问元素
    }
    
    1. 增强for循环也可以在数组使用
    2. 快捷键:I + 回车,或者遍历的对象 + .for,或者iter

List接口方法

注意:Collection中的方法List也能用,但是List中的方法Collection不一定能够用

  • 基本介绍:

    1. List集合类中红元素有序(即添加顺序和取出顺序一致),****且可重复 ****
    2. List集合中的每个元素都有其对应的顺序索引,即支持索引,且索引从0开始
    3. List容器中的每个元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
    4. JDK API中List接口的实现类常用的有 ArrayList,LinkedList, Vector
  • List接口中常用的根据索引来操作集合元素的方法

    • 在这里插入图片描述

    • 在这里插入图片描述

    • 在这里插入图片描述

    • 在这里插入图片描述

  • List的三种遍历方式:迭代器,增强for,普通for
    在这里插入图片描述

ArrayList

  • 注意事项:
    1. 可以存放空值,且多个
    2. ArrayList是由数组来实现数据存储的
    3. ArrayList基本等同于Vector,除了ArrayList是线程不安全的(但执行效率高),在多线程的情况西啊,不建议使用ArrayList
ArrayList的底层操作机制源码分析【重难点】
  • 结论:
    1. ArrayList中维护了一个Object类型的数组elementData,transient Object[] elementData;
      //transiemt:表示瞬间,短暂,表示该属性不会被序列化(串行化)也就是不能在网络上传输
    2. 当创建ArrayList对象是,如果使用的是无参构造器ArrayList(),测初始elementData容量为0,第一次添加,则扩容elementData为10,如需再次扩容,则扩大elementData为1.5倍(15 -> 22 -> 33 …)
    3. 如果使用的是指定大小的构造器ArrayList(int),则初始elementData容量为指定大小,如需扩容,则直接扩容elementData为1.5倍( 1.5 * int -> 1.5 * 1.5 * int …)

LinkedList

  • 基本介绍:

    1. LinkedList实现了双向链表和双端队列的特点
    2. 可以添加任意元素(元素可重复,包括null
    3. 线程不安全,没有实现同步
  • LinkedList的底层操作机制
    在这里插入图片描述

  • ArrayList和LinkedList的比较
    在这里插入图片描述

    相当于一个是顺序表,一个是链表

Vector

  • 基本介绍:
    1. Vector底层是一个对象数组protected Object[] elementData;
    2. Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized
    3. 在开发过程中,需要线程同步安全时,考虑使用Vector
  • Vector和ArrayList的比较
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值