数组是一个很基础的数据结构,几乎所有的编程语言都有数组结构的实现。虽然不尽完全相同,但是本质上都是用来存放数据的一段连续的结构。
Java中的数组:
一段连续的内存空间,在初始化时即指定了数组的长度,在初始化完成后的数组长度不可改变;数据可以存储基本类型和包装类型,未赋值的数组元素为存储类型的默认值。
Java初始化数组时的内存变化:
Java在初始化一个数组时,在内存中的Heap(堆)和Stack(栈)上各开辟了一处空间,在Heap上的空间用于存放数组本身,在Stack上的空间用于存放数组引用实例,并指向Heap上的数组本身!
avatar
Java中的数组的特点:
删除慢:
数组删除元素时,被删除元素的之后的元素都需要向前移动,因此速度慢。
扩展性差:
数组的长度在初始化时即指定,在初始化后无法更改,因此无法扩展;但是可以new一个长度更大的新数组,然后将旧数组的元素全部拷贝到新数组中,并将引用指向新的数组来实现曲线扩展,但是这种方式消耗极大;JDK中的ArrayList就是采用的这种方式实现的集合扩容机制。
Java中数组的有序数组与无序数组:
- 无序数组:指的是数组中的元素没有按照某种特定的顺组的数组,默认按照插入先后进行的排序
- 有序数组:指的是数组中的元素按照某种特定的顺序进行排序,如根据元素值的大小进行排序的int[]数组
有序数组与无序数组的一些区别:
查找(这里指的是按照元素值进行查找而不是按照下标查找):
有序数组的查找较无序数组的查找更快一些
扩展:
算法的复杂度问题:
O(1)>O(logN)>O(N)>{O(N^2)}
网友评论