JAVA基础——集合 原创
春节不停更,此文正在参加「星光计划-春节更帖活动」 链接:https://harmonyos.51cto.com/posts/9923
集合:对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能。
数组和集合的区别:
①数组长度固定,集合长度不固定
②数组可以存储基本类型和引用类型,集合只能存储引用类型
Collection体系集合
List接口特点:有序、有下标,元素可重复
1) void add(int index, Object ele):在index位置插入ele元素
2) boolean addAll(int index, Collection eles):从index位置开始将
eles中的所有元素添加进来
3) Object get(int index):获取指定index位置的元素
4) int indexOf(Object obj):返回obj在集合中首次出现的位置
5) int lastlndexOf(Object obj):返回obj在当前集合中未次出现的位置
6) Object remove(int index):移除指定index位置的元素,并返回此元素
7) Object set(int index, Object ele):设置指定index位置的元素为ele ,
相当于是替换.
8) List subList(int fromlndex, int tolndex);返回从fromIndex到
tolndex位置的子集合
Set接口特点:无序、无下标、元素不能重复
ArrayList常用方法:
1) add:添加单个元素
2) remove:删除指定元素
3) contains:查找元素是否存在
4) size:获取元素个数
5) isEmpty:判断是否为空
6) clear:清空
7) addAll:添加多个元素
8) containsAll:查找多个元素是否都存在
9) removeAll:删除多个元素
迭代器遍历:Iterator对象称为迭代器,主要用于遍历Collection集合的元素
迭代器执行原理:
注意:在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
增强for循环:就是简化版的iterator(for循环底层仍然是迭代器)
基本语法:for(元素类型 元素名:集合名或数组名)
ArrayList底层结构和源码分析
ArrayList(线程不安全,没有Synchronized,执行效率高,多线程不使用)基本等同于Vector
结论
1)ArrayList中维护了一个Object类型的数组elementData.
transient Object[] elementData;//transient表示瞬间,短暂的,表示该属性不会被序列号
2)当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第1
次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍。
Vector底层结构和源码分析
①vector底层是一个对象数组,protected Object[] elementData;
②Vector是线程同步,即线程安全。Vector类的操作方法有synchronized
vector和ArrayList的比较
LinkedList底层结构和源码分析
1)LinkedList底层实现了双向链表和双端队列特点
2)可以添加任意元素(元素可以重复),包括null
3)线程不安全,没有实现同步
LinkedList底层操作机制
1) LinkedList底层维护了一个双向链表.
2)LinkedList中维护了两个属性first和last分别指向首节点和尾节点3)每个节点(Node对象),里面又维护了prev、next、item三个属性,
其中通过
prev指向前一个,通过next指向后一个节点。最终实现双向链表.
4)所以LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高。