150天打卡Day24_集合深度解析- Java集合体系
Java集合框架概述
集合,数组都是对多个数据进行存储操作的结构,简称Java容器,此时的存储主要是内存层面的,不涉及到持久化存储
数组在存储多个数据方面的缺点
一旦初始化以后,其长度就确定了,不可修改,
数组一旦定义好类型,其类型就确定了,只能操作指定类型的数据
数组中提供的方法有限,对于例如插入,删除操作非常不便,效率很低
获取数组中实际元素个数的需求,数组中没有现成的属性或方法可用
数组存储数据的特点:有序可重复,对于一些无序不可重复的需求,数组也不能满足
Java集合体系介绍
Java集合可以分为Collection和Map两种体系,位于Java.util包下
Collection:存放单列数据,定义了存取一组对象的方法的集合
下分两类:
List:元素有序,可重复的集合(ArrayList,LinkedList,vector)
set:元素无序,不可重复的集合(HashSet,LinkedHashSet,TreeSet)
Map:存放双列数据,保存具有映射关系的"key-value"对的集合
(HashMap,LinkedHashMap,TreeMap,HashTable,Properties)
集合这里的有序不是排序,指的是添加顺序和取出顺序一致
Collection和Collections的区别
Collection是一个单列集合接口,提供了对集合对象进行基本操作的通用接口方法
Collections是一个包装类,包含1很多对集合操作的静态方法,此类不能被实例化,是一个工具类,服务于Java的Collection集合
集合迭代器 iterator
迭代器常用来遍历集合
Foreach循环遍历(内部仍然是迭代器)
Collection子接口之一:List接口
鉴于Java中用数组存储数据的局限性,通常使用LIst代替数组
List集合中元素有序,且可重复,集合中每个元素都有其对应的顺序索引
List容器中的元素都有对应一个整数型的序号记载其在容器中的位置,可以根据序号存取元素
List接口常用的实现类:ArrayList,LinkedList,Vector
ArrayList,LinkedList,Vector的异同
相同点
均实现了List接口,拥有List集合的特性
不同点
ArrayList作为List接口最常用的实现类,线程不安全,效率高,底层是一个Object类型的数组elementdata,在JDK1.2版本问世
LinkedList底层使用双向链表存储,线程不安全,对于频繁的插入,删除操作,效率高于ArrayList,查找效率低于ArrayList,因为缺少按索引查找
Vector和ArrayList基本一致,底层公共方法均加了Synchronized关键字,线程安全,效率较低,底层也是Object[] elementData ,JDK1.0版本就问世了
ArrayList源码分析
底层创建的初始长度为10的Object类型的数组elementData,扩容扩为原来的1.5倍,同时将原有数组中的数据拷贝到新数组中,建议开发中创建数组使用ArrayList带参构造器,指定初始容量,减少扩容可以使效率提高
JDK1.8ArrayList变化
创建时不指定容量,第一次调用add方法才创建初始容量为10的数组elementdata,其余与1.7一致
LinkedList源码分析
底层采用双向链表进行存储,底层数据存储的基本单位是Node,内部声明了Node类型的prev和next属性, 默认值为null,进行添加操作相当于把元素封装到Node中,创建了Node对象
Vector源码分析
与ArrayList很相似,公共方法均添加了synchronized关键字,保证线程安全
Vector底层扩容,扩容为原来的2倍
大家记得给关阿姨点个关注呦
