数组与链表的区别?

数组与链表的区别?


数组

  • Java基于数组实现的集合
    ArrayList
  • 数组示意图
    enter description here
  • 数组特性举例

数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要望某个位置插入或删除一个人时,后面的人身上的编号都要变。当然,加入或删除的人始终末尾的也快


链表

  • Java基于链表实现的集合
    LinkedList
  • 链表示意图
    enter description here
  • 链表特性举例

链表就像手牵着手站成一圈的人,要找第10个人不容易,必须从第一个人一个个数过去。但插入、删除快。插入时只要解开两个人的手,并重新牵上新加进来的人的手就可以。删除一样的道理


数组和链表对比

分类 数组 链表
逻辑结构角度 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)
内存存储角度 (静态)数组从栈中分配空间, 对于程序员方便快速,但自由度小 链表从堆中分配空间, 自由度大但申请管理比较麻烦

数组链表对比总结

  • 数组静态分配内存,链表动态分配内存;

  • 数组在内存中连续,链表不连续;

  • 数组元素在栈区,链表元素在堆区;

  • 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);

  • 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1);

posted on 2017-09-16 23:57  Belong_yucl  阅读(2939)  评论(0编辑  收藏  举报

导航