首先要有一个大致的总体体系,
这是从网上看到的,感觉还不错,就复制过来了,千万别告我侵权。
首先我们先从我们最熟悉的数组开始说,之前面试的时候,问到数组问题的时候,就想某些List的底层是数组结构,然后说增删慢,查询快,但是如果你真的去了解一下底层的话,这说法太笼统,但是实际比对还真的是没有办法做到那么细致,所以很不容易发现问题,所以我专门的去看了一下相关的书籍,也做了一些简单的测试。总结了几下几点内容。
- 首先我们先说查询快,其实你可以想一下,如果数组,我们查询是根据下标内容来查询的话,那是很快的,但是通常情况我们是根据什么来查找呢,我们是根据元素值来查找的,
给定一个元素值,对于无序数组,我们需要从数组第一个元素开始遍历,直到找到那个元素。
有序数组通过特定的算法查找的速度会比无序数组快。
- 增删问题上来说,
首先我们先说说增加,
对于无序的数组来说,元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增加一个元素很简单,只需要在数组末尾添加元素就ok了,但是有序数组却不一定了,它需要在指定的位置插入。要是是一个升序的数组1-200,你插入了一个100,那么就会在中间插入,那就意味着他回去先看前面的100个数,所以,插入的时候对无序数组来说是快的。
而对删除来说,根据元素值删除,我们要先找到该元素所处的位置,然后将元素后面的值整体向前面移动一个位置。也需要比较多的时间。
数组结构还有一个最大的缺点,那就是动态扩容问题,他是没有办法解决的,
数组一旦创建之后,大小固定了,那么注定了他不能的动态扩展数组中元素的个数,如果初始化的时候给的贼大,不好意思,资源浪费,如果初始化的时候给的贼小,不好意思数据有点多,装不下。
很显然,数组虽然插入快,但是查找和删除都比较慢,而且扩展性差,所以我们一般不会用数组来存储数据
既然数组结构的弊端这么明显,我们是不是有一种数据结构插入、查找、删除都很快,而且还能动态扩容,这肯定有,但是都不是绝对的,在某种特殊情况下确实有,下面再继续介绍。
以上的都是文字描述,确实很恶心,所以大家凑活看,