赞
踩
数组:相同数据类型的元素按照一定的顺序排列的集合
数组本身属于引用数据类型,数组是由下标索引和data两部分组成。
1、在堆内存中,数组是一块连续的区域
2、数组的空间在编译阶段就需要进行确定,所以需要提前给出数组空间的大小(在运行阶段是不允许改变的)
3、数组的插入和删除效率低,插入时,待插入位置的元素和他后面的元素都需要向后移动,删除时,待删除位置的元素和它后面的所有元素都需要向前移动
4、随机访问效率高,因为它的地址是连续的,想要访问哪个元素,只需要首地址向后偏移索引值(数组下标)就能访问到
5、不利于扩展,空间不够时只能重新定义数组,分配内存
6、因为数组本身属于引用类型数据,所以它的空间是从栈进行分配,栈存储引用地址,然后堆上存储数据,见结构图。
链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现。每个链表包含多个节点,节点又由data数据和指向下一个数据的指针地址两部分组成。
1、链表每个节点的内存地址都是分散的,不需要连续
2、查询效率低,时间复杂度是O(n),因为链表的空间分散,所以要找哪个位置的元素,得从第一个节点开始顺序遍历。
3、链表不需要提前指定大小,动态扩展,故空间利用率高
4、任意位置的插入和删除元素效率高,时间复杂度是O(1)
比较 | 数组 | 链表 |
---|---|---|
查询 | O(1) | O(n) |
插入、删除 | O(n) | O(1) |
空间利用率 | 低 | 高 |
扩展性 | 低(数组大小提前定义,若要扩展,得重新定义数组,数据迁移) | 高(动态扩展) |
运用 | Vetor和ArrayList都是数组实现,查询效率高,Vector被Synchronized修饰,线程安全,ArrayList线程不安全 | LinkedList是链表实现的,查询效率低,插入和删除效率高,线程不安全 |
如有错误,烦请指出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。