重学数据结构与算法之一:数组

开篇词

对于重学数据结构与算法专栏,本专栏会统一从三个问题出发,来尝试解释清楚其中的奥秘:

WHW
  1. What 是什么?
  2. How 有何特点/是如何实现的?
  3. When 如何使用/什么时候使用?

数组

1. 数组是什么?

数组是一个线性表,它使用一组连续的内存空间,来存储一组相同类型的数据。

2.数组有什么特点?是如何实现的?

正是因为数据使用一组连续的内存空间来存储数据,因而它可以支持根据下标进行“随机访问”,随机访问的时间复杂度为 O(1)。但数组在插入和删除元素时因需要维护数据的连续性需要进行大量的数据搬移工作,所以插入数据删除数据耗时较长 O(n)(较链表)。

3.什么时候使用,如何使用

对于 Java 开发来说,日常开发中会使用 JDK 封装好的容器,如 ArrayList 。ArrayList 内部实现就是数组,其中封装了大量的常用操作方便开发者使用,如动态扩容(1.5 倍)等。但 ArrayList 不支持使用基础数据类型如 int 、long 。如果在必须要使用基础数据类型的场景下需要使用原始数组来存储,同时因为自动装箱和拆箱过程比较耗时,在对性能要求比较苛刻的场景下推荐使用原始数组,比如底层框架开发。

问题与思考

1.数据是以何种形式存储在内存中的?

内存条是由上亿个电子元器件构成的,这些电子元器件实际上就是电路,电路有两种电压:5v 和 0v 。5v 为通电 0v 为断电其代表的含义就是 1 和 0,所以计算机底层就是使用 0 和 1 来表示的。一个电子元器件称为 1 bit 。 8 个即为 1 字节 byte 。所以换算公式如下:
1*8 bit = 1 byte
1024 * 1 byte = 1 kb
1024 * 1 kb = 1 mb
1024 * 1 mb = 1 gb

你可能感兴趣的:(重学数据结构与算法,数据结构,java,数组)