zoukankan      html  css  js  c++  java
  • 链表VS数组

    1、链表是通过“指针”将一组零散的内存块串联起来的数据结构
    2、链表可以分为单链表、双向链表和单/双向循环链表
    2.1、删除链表中等于某个值的节点,单链表和双向链表的时间复杂度一样
    2.2、由于双向列表可以直接找到前驱结点,所以删除指定的节点,双向链表比单向链表高;同时在链表的某个指定结点前面添加一个结点,双向链表比单链表也有很大的优势
    2.3、对于一个有序链表,双向链表可以与当前节点的前后节点比较,然后决定往前还是往后进一步折半查找,这种情况下查询的效率也要比单链表高一些
    2.4、因为双向链表中的结点已经保存了前驱结点的指针,所以内存消耗会比单向链表多,但是这都是以空间换时间的设计思想
    3、 LinkedHashMap就是用双向链表这种数据结构实现的
    4、链表 VS 数组
    4.1、数组的缺点是大小固定,一经声明就要占用整块连续内存空间。所以申请一个 100MB 大小的数组,当内存中没有连续的、足够大的存储空间时会申请失败,报内存不足,即便内存的剩余总可用空间大于 100MB;但是如果我们申请的是 100MB 大小的链表就不会有问题
    4.2、数组实现上使用连续的内存空间可以借助 CPU 的缓存机制,预读数组中的数据,所以访问效率更高。而链表在内存中并不是连续存储,所以办法有效预读
    4.3、如果对内存的使用非常苛刻,那数组就比较合适。因为链表中的每个结点都需要消耗额外的存储空间去存储一份指向下一个结点的指针,所以内存消耗会翻倍。而且,对链表进行频繁的添加、删除操作,还会导致频繁的内存申请和释放,容易造成内存碎片,在Java中可能会导致频繁的 GC

  • 相关阅读:
    如何在intellj Idea中给新建的项目添加jar包?
    sell
    3D立体方块旋转图册
    npm run eject 命令后出现This git repository has untracked files or uncommitted changes错误
    video标签使用积累+背景视频+遇到问题(视频无法显示,不能自动播放,video自适应div,控件隐藏)
    webpack——react
    webpack——bable-loader,core,preset,编译es6
    webpack——打包JS
    简单的前端上传图片代码
    node——文件写入,文件读取
  • 原文地址:https://www.cnblogs.com/jetqiu/p/13358080.html
Copyright © 2011-2022 走看看