• 数组与链表的区别?


    数组与链表的区别?


    数组

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

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


    链表

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

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


    数组和链表对比

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

    数组链表对比总结

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

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

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

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

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

  • 相关阅读:
    获取 iPhone 上联系人姓名、电话、邮件的代码
    NSDate常用代码范例
    iphone开发之多线程NSThread和NSInvocationOperation
    iphone 定时提醒
    iphone 程序自动登陆
    搞定大厂算法面试之leetcode精讲11剪枝&回溯
    大厂算法面试之leetcode精讲7.双指针
    大厂算法面试之leetcode精讲8.滑动窗口
    大厂算法面试之leetcode精讲15.链表
    大厂算法面试之leetcode精讲10.递归&分治
  • 原文地址:https://www.cnblogs.com/Mrbelong/p/7533545.html
Copyright © 2020-2023  润新知