欢迎光临散文网 会员登陆 & 注册

150天打卡Day24_集合深度解析- Java集合体系

2021-05-18 11:39 作者:关阿姨的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倍

大家记得给关阿姨点个关注呦


150天打卡Day24_集合深度解析- Java集合体系的评论 (共 条)

分享到微博请遵守国家法律