Java集合框架

Java集合框架

数组和集合的区别:

​ 1,数组是固定长度的,缺少灵活性

​ 2,数组保存的数据类型需要一致性

​ 3,数组进行增加数据的代码比较复杂

1,两大接口Collection和Map

​ 集合主要分为两组(单列集合和双列集合)

Collection:(单列集合)

				**List**:

ArrayListLinkedListVector

Set

HashSetTreeSet

image-20211216184351297

Collection:添加数据的方法为add();

Map: (双列集合,K ,V)

HashMap:, TreeMap ,HashTable:

LinkerHashMap Properties

image-20211216184449908

Map添加数据的方法为put();

2,Collection接口实现类

继承了iterable接口collection extends iterable

1)collection实现子类可以存放多个元素,每个元素可以是Object

2)有些Collection的实现类,可以存放重复的元素,有些不可以

3)有些Collection的实现类,有些事有序的(List),有些无序的(set)

4)Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的

常用方法:

image-20220119141310327

2,1 接口的遍历方式 1-使用Iterator(迭代器)

基本介绍

image-20220119142103432

1)Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。

2)所有实现了Collection接口的集合类对象都有一个iterator()方法,用于返回一个实现了Iterator接口的对象,既可以返回一个迭代器。

3)iterator仅用于遍历集合,iteratot本身不存放对象。

4)属于iterable的接口方法

image-20220119142850104

迭代器的执行原理:

image-20220119143150466 image-20220119143414080

快捷键生成 itit 生成迭代器遍历

如果希望再次遍历,需要重置迭代器

image-20220119144400139
2,2 接口的遍历方式 2-使用for(增强for)

增强for底层也是itrerator迭代器:也称简化版的迭代器

快捷键的方式大写I:i;

2,3接口的遍历方式 3-使用for(普通for)
image-20220119151739730
2,3 List接口的方法(属于java.util包;底层是数组)

1)集合中元素有序,(添加顺序和取出的顺序一致),且可重复,允许多个空null

2)集合中的每个元素都有相对应的顺序索引,支持索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YqJYnxpD-1642594994015)(C:\Users\null\AppData\Roaming\Typora\typora-user-images\image-20220119145957656.png)]

常用的List接口方法

image-20220119151103219dd

3, ArrayList的注意事项:

等同与Vector,ArrayList是线程不安全(没有synchronized修饰)但执行效率高,Vector是线程安全的但执行效率低,在多线程的情况下,不建议使用ArrayList

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vVdHTW01-1642594994016)(C:\Users\null\AppData\Roaming\Typora\typora-user-images\image-20220119152352163.png)]

4,ArrayList的底层源码分析
1)ArrayList中维护了一个Object类型的数组elementData,transient(表示 瞬间,短暂。表示该属性不会被序列化) Object[] elemenetData;
2)当创建ArrayList对象时,如果使用的无参构造器,则初始elementData的容量为0,第一次添加,则扩容elementDate为10,如需要再次扩容,则扩容为1.5倍
image-20220119153937098 image-20220119153836012

执行List.add确认容量大小;决定是否要扩容,然后在赋值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PtvAWU29-1642594994016)(C:\Users\null\AppData\Roaming\Typora\typora-user-images\image-20220119154117476.png)]

进入ensureCapacityInternal方法,该方法第一次扩容为10

image-20220119154442710

1)modCount++记录集合修改的次数

2)如果elementData的大小不够,就调用grow方法;

1)进入grow的方法,

真的扩容给;

1)使用扩容机制来确定要扩容多大

2)第一次newCapacity=10

3)第二次及其以后,按照1.5倍来扩容

4)扩容Arrays.copyOf(),保证原先的数组,在进行扩容,通俗点就叫;在新的扩容的位置=复制原先的内容+扩容的容量

image-20220119155217649
3)如果使用的是指定大小的构造器,则初始elementData的容量指定大小,如果需要扩容,则直接扩容elementData为1.5倍;
image-20220119164740869

1)创建了一个指定大小elementData数组

this.elementData = new Object[capacity]

\image-20220119164740869.png" alt=“image-20220119164740869” style=“zoom:50%;” />

1)创建了一个指定大小elementData数组

this.elementData = new Object[capacity]

image-20220119164757345
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值