zoukankan      html  css  js  c++  java
  • 极客时间课程《数据结构与算法之美》笔记02

    数组与容器

    线性表

    每个线性表上的数据最多只有前和后两个方向。数组、链表、队列、栈都是线性表。
    与此对应,非线性表指数据之间不是简单的前后关系。比如:二叉树、堆、图等。

    数组有连续的内存空间和相同类型的数据,这两个特性可以使其“随机访问”。

    纠正知识点:数组和链表的区别
    链表适合插入、删除,时间复杂度 O (1);数组适合查找,即便是排好序的数组,用二分查找,时间复杂度也是 O (logn)。所以,正确的表述应该是:数组支持随机访问,根据下标随机访问的时间复杂度为 O (1)。

    容器与数组

    Java 中的 ArrayList、C++ STL 中的 vector均是优秀的容器。

    ArrayList优势:

    • 将很多数组操作细节封装
    • 支持动态扩容

    扩容操作耗时,最好创建ArrayList的时候事先指定数据大小。

    选用ArrayList和数组的区别:
    1.Java ArrayList 无法存储基本类型,比如 int、long,需要封装为 Integer、Long 类,而 Autoboxing、Unboxing 则有一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,就可以选用数组。

    1. 如果数据大小事先已知,并且对数据的操作非常简单,用不到 ArrayList 提供的大部分方法,也可以直接使用数组。

    2. 当要表示多维数组时,用数组往往会更加直观。比如 Object [][] array;而用容器的话则需要这样定义:ArrayList array。

    一般业务开发选择容器就足够了,省时省力。一般影响不到整体性能。

    数组从0开始编号:
    1.偏移地址,0代表偏移量为0。
    2.历史遗留问题。

  • 相关阅读:
    git命令回退代码并同步到远程仓库
    git拉取远程指定分支
    vue动态绑定样式
    友链
    css三大特性
    CSS的背景background
    元素显示模式(块元素、行内元素、行内块元素)
    CSS复合选择器
    快速生成HTML结构+CSS样式语法
    文本属性
  • 原文地址:https://www.cnblogs.com/JackKing-defier/p/10490383.html
Copyright © 2011-2022 走看看