前言
今天开始我们进入java集合内容的学习,理解数据容器对于数据处理的作用.
集合的好处
可以动态保存任量对象,使用比较方便
提供了一系列方便的操作对象的方法,add,remove,let, get等
使用集合添加,删除新元素的代码一简结
集合种类
java中的集合种类很多,主要分为两大类
单列集合:
双列集合:
⭐️1.集合主要是两组(单列集合,双列集合)
2.Collection接口中有两个重要的子接口 List,Set,它们的实现子类都是单列集合
单列集合指的是集合中放的是单个元素.
双列集合就是在放的时候键值对一起放.
那么接下来就来学习集合类🥰🥰🥰
i.Collection接口
(a)接口定义:
(1)Collection实现子类可以存放多个元素,每个元素可以是Object
(2)有些Collection的实现类,可以存放重复的元素,有些不可以
(3)有些collection的实现类,有些是有序的(List),有是不是有序的(Set)
(4)Collection接口没有直接的实现子类,是通过它用子接口List和Set来实现的
(b)常用方法:
<!!!>我将方法名放入word中可能会有红线
下面给大家演示一下如何使用
特别提及:
⭐️tips:<>中的内容是指定泛型,后面会详细讲,大家只需要关心它的参数类型即可.
(c)Collection接口遍历元素方式
1.使用Iterator(迭代器)
(1) Iterator 对象称为迭代器,主要用于遍历Collection集合中的元素
(2)所有实现了Collection接口的集合类都有一个iterator()方法一个实现了Iterator接口的对象,即可以返回一个迭代器
(4)Iterator仅用于遍历集合,Iterater本身并不存放对象.
⭐️tips:本质是使用内部类来进行数据的遍历,内部类用private修饰
Iterator接口方法
⭐️tips:
1.在调用iterator.next()方法之前必须要调用iterater. hasNext()进行检测.若不调用,且下一条记录无效,直接调用iterator.next(),会抛出NoSuchElementException异常
2.当退出while循环,这时iterator迭代器,指向最后的元素。
iterater.next();
3.如果希望再次遍历,需要重置我们的迭代器.
重新new一个生成器
2.使用增强for循环
tips:
1.使用增强for,遍历Collection集合
底层自动调用代装的hasNext() 和next()
2.增强for,底层仍然是迭代器.
3.增强for可以理解成简化版本的迭代器.
ii.List接口
(1)List接口基本介绍.
List接口是Collection接口的子接口
(1)List集合类中元素有序(即添加顺序和取出顺序一致),且可重复.
(2)List集合中的每个元素都有其对应的顺序学习,即支持索引
(3)List自容器中的旨.元素都对应一个整数型的序号记载其在容器中的位置,可以根据序资号存取容器中的元素.
(4)JDK API中List接口的实现类有
超级接口:Collection<E>,Iterable<E>.
Abstractlist, AbstractsequentialList,
ArrayList, AttributeList
CopyOnWriteArrayList,LinkedList,RoleList,
RoleUnresolvedList,Stack,Vector
常用的有:ArrayList,LinkedList和Vector
(2)List接口的常用方法
List集合里添加了一些根据索引来操作集合元素的方法.
(2)List的三种遍历方式
[ArrayList,LinkedList,Vector]
说明:使用LinkedList完成使用方式和ArrayList一样
iii.ArrayList类
注意事项:
(1) permits ,all elements, including null. ArrayList 可以加入null,并且多个
(2)ArrayList是用数组来实现数据存储(3)ArrayList基本等同Vecter,除了Arylist是线程不安全(执行效率高),在多线程情况下,不建议使用.
Arraylist是线程不安全的,没有synchronized
ArrayList的存层操作机制源码分析
(1)ArrayList中维护了一个Object类型的数组elementData
⭐️如果有一个属性或成员,它被transient修饰了,那就代表这个对象在进行序列化时,这个属性不被序列化
(2)当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第1次添加,则扩容elementData为10,如需要再次扩容.则扩荣elementData为1.5倍.
(3)如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍.
tips:下面的构造方法与上面的不同点在于传入了一个初始容量,其余扩容的实现都是相同的原理
iv.Vector类
(1)Vector类的定义说明
(2)Vector底层也是一个对象数组
(3)Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized
(4)在开发中,需要线程同步安全时,考虑使用Vector.