我的对数组的理解

2018-08-08  本文已影响0人  haha_c609

  数组是一个很基础的数据结构,几乎所有的编程语言都有数组结构的实现。虽然不尽完全相同,但是本质上都是用来存放数据的一段连续的结构。

Java中的数组:

  一段连续的内存空间,在初始化时即指定了数组的长度,在初始化完成后的数组长度不可改变;数据可以存储基本类型和包装类型,未赋值的数组元素为存储类型的默认值。

Java初始化数组时的内存变化:

  Java在初始化一个数组时,在内存中的Heap(堆)和Stack(栈)上各开辟了一处空间,在Heap上的空间用于存放数组本身,在Stack上的空间用于存放数组引用实例,并指向Heap上的数组本身!


avatar

Java中的数组的特点:

删除慢:

  数组删除元素时,被删除元素的之后的元素都需要向前移动,因此速度慢。

扩展性差:

  数组的长度在初始化时即指定,在初始化后无法更改,因此无法扩展;但是可以new一个长度更大的新数组,然后将旧数组的元素全部拷贝到新数组中,并将引用指向新的数组来实现曲线扩展,但是这种方式消耗极大;JDK中的ArrayList就是采用的这种方式实现的集合扩容机制。

Java中数组的有序数组与无序数组:

  • 无序数组:指的是数组中的元素没有按照某种特定的顺组的数组,默认按照插入先后进行的排序
  • 有序数组:指的是数组中的元素按照某种特定的顺序进行排序,如根据元素值的大小进行排序的int[]数组

有序数组与无序数组的一些区别:
查找(这里指的是按照元素值进行查找而不是按照下标查找):
  有序数组的查找较无序数组的查找更快一些

扩展:

算法的复杂度问题:
O(1)>O(logN)>O(N)>{O(N^2)}

上一篇 下一篇

猜你喜欢

热点阅读