数组:数组是一组在内存中连续存储多个相同类型元素并且有序的数据结构,在内存中的分配也是连续的,一旦初始化完成,长度不可变。
数组本身是引用类型数据,但是可以存储任意类型的数据,包括基本数据类型和引用数据类型,初始化的时候在内存中开辟一块连续的存储空间,数组名指向了该连续空间的首地址。
数组特点
优点:创建数组对象会在内存中开辟一块连续的内存空间,存取有序,通过索引(角标、下标)访问数组中的元素
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、数组的长度初始化(数组创建)之后就长度固定不变,无法扩容
2、数组只能存储同一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。
数组的增删效率相对较低,因为增删时,是先创建一个新的数组,新数组的长度为旧数组的长度加上或者减去所要增删元素的个数,然后在把增删后的旧数组放到新数组中
适用场景:
频繁查询,对存储空间要求不大,很少增加和删除的情况。

栈:栈是一种线性的数据结构,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 

栈的特点:

先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。

java 数组必须连续存放 java数组内存分配连续吗_初始化


栈的结构就像枪的子弹匣,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。

队列
队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队,示例图如下:

java 数组必须连续存放 java数组内存分配连续吗_java 数组必须连续存放_02


使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

List集合:

java 数组必须连续存放 java数组内存分配连续吗_数据_03

java 数组必须连续存放 java数组内存分配连续吗_Java集合_04

ArrayList集合:

底层是数组结构,查询快增删慢,增删时都要新建数组,

java 数组必须连续存放 java数组内存分配连续吗_Java集合_05

LinkedList集合:

java 数组必须连续存放 java数组内存分配连续吗_初始化_06

Set集合接口:

HashSet集合:

java 数组必须连续存放 java数组内存分配连续吗_java 数组必须连续存放_07

java 数组必须连续存放 java数组内存分配连续吗_数组_08

哈希值:

java 数组必须连续存放 java数组内存分配连续吗_初始化_09