zoukankan      html  css  js  c++  java
  • 数据结构

    一、数组
    1、保留插入顺序
    2、通过索引访问元素(索引与排序有关系)
    3、可迭代
    4、JS数组大小可以动态调整,但内存无法掌控(c++静态数组,长度不可变)
    5、允许值重复,且可以为混合类型
    6、删除和查找元素比较消耗性能 eg: find() 和 findIndex()  ~~~遍历查询,消耗性能,删除元素后,后边元素向前补位
    7、有序集合,可以通过索引值访问

    查询元素
    find()
    findIndex()
    删除元素
    splice()

    arr.concat() 返回被连接数组的一个副本
    arr.join() 返回被指定分割符分割的字符串
    arr.slice(startIndex,endIndex) 返回被剪切的元素片段
    arr.pop() 返回被删除的元素,如果是空数组则不改变原数组,返回undefined
    arr.push()  返回指定的值添加到数组后的新长度
    arr.shift() 功能:把数组的第一个元素从中删除,返回值:被删除的元素
    arr.unshift() 功能:向数组的开头添加一个或多个元素,返回值:返回数组的新长度
    arr.splice() 功能:向数组添加项目或者从数组中删除项目  返回值:参数2被删除的元素数组
    arr.reverse() 功能:颠倒数组中元素的顺序  返回值:返回颠倒顺序之后的数组
    arr.sort()    返回值:排序之后的数组

    原型方法:
    Array.prototype.indexOf
    Array.prototype.lastIndexOf
    Array.prototype.every
    Array.prototype.some
    Array.prototype.forEach
    Array.prototype.map
    Array.prototype.filter
    Array.prototype.reduce
    Array.prototype.reduceRight
    Array.prototype.includes
    Array.prototype.find
    Array.prototype.findIndex

    ES6方法:
    Array.of(): 将元素列表转为数组,避免new Array()带来的诡异行为
    Array.from(iterator,fn,obj): 将具有Iterator接口的对象或类数组转为数组
    Array.keys()
    Array.values()
    Array.entries()

    二、集合(Sets)
    1、实例化创建,add添加
    2、元素不能重复(元素唯一性)
    3、无序集合,存储和读取的顺序可能不一样,无法通过索引值访问,需要通过方法访问或获取元素
    4、for循环可遍历
    5、大小(长度)可动态调整
    6、删除和查找元素简单快捷(不会影响其他元素位置,因此性能消耗较低)

    添加元素:
    add()
    访问元素:
    has()
    删除元素:
    delete()

    三、对象(Object)
    1、无序的键值对数据
    2、通过键名(属性)访问元素
    3、不可遍历(for...in除外)
    4、键是唯一的,值不是
    5、可以存储数据和函数
    6、有原型方法

    删除属性
    delete person.age

    四、映射(Maps)
    1、有序的键值对数据
    2、通过键访问元素
    3、可遍历(for循环)
    4、键是唯一的,值不是
    5、键可以是各种类型的值(包括对象、数组)
    6、纯数据存储,针对数据访问进行了优化
    7、大数据量时,性能优于对象

    实例化:
    new Map()
    添加元素:
    map.set('average',1.6)

    五、弱集合与弱映射
    集合和映射的 变体,值和键仅"弱引用",如果未在应用程序的其他任何地方使用,垃圾回收则可以删除键和值


    六、链表
    单链表:每一个元素都知道下一个元素
    可以有效的调整大小并再列表的开头和结尾插入
    1、为什么使用链表
    历史上,为方便内存管理(节约内存):不必事先指定内存大小,防止多余内存浪费
    如今,JS具有动态数组,而内存也并不再是JS应用程序中的主要问题
    * 在列表的开头进行高频插入操作,链表会很有用--链表比数组操作更快

    七、衡量性能(时间复杂度 -- 大O符号)
    1、线性时间复杂度
    2、常数阶时间复杂度
    3、对数阶时间复杂度
    4、线性对数时间复杂度
    5、平方阶时间复杂度

    *** 代码执行时间的增长变化趋势

    八、列表&表格
    列表:值的集合,eg:数组、集合、链表 适合存储通过位置(通过索引或搜索)检索的值,也适合循环
    表格:键值对的集合 eg:对象、映射 适合存储通过键检索的值,不关注循环

    九、列表-堆栈
    1、Last In, First Out  简化的数组
    2、栈顶推入 Push      栈顶删除  Pop
    3、使用场景:调用堆栈

    十、队列

    十、哈希表
    1、现有JS的对象都是基于哈希表实现的
    2、哈希表  = 索引 + 值       key => hash函数 => 索引

  • 相关阅读:
    电脑蓝屏的原因及解决方法
    或将引爆第四次工业革命!一张图带你看完人工智能大事件
    sata2.0和sata3.0的区别
    15款顶级的开源人工智能工具推荐
    解读神秘而又强大的百度人工智能计算机
    人工智能让程序员自危:码农大批失业
    电脑开机黑屏只有光标在闪怎么办
    关于XSS漏洞的简介以及分类
    SSD知识
    centos7下安装docker(15.5容器跨主机网络--flanneld)
  • 原文地址:https://www.cnblogs.com/nanhuaqiushui/p/14877995.html
Copyright © 2011-2022 走看看