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.历史遗留问题。

  • 相关阅读:
    菜单按钮及导航
    实现点击箭头切换图片页和相册滚动
    网页设计的基本原则
    网格系统
    表单系列2
    类与对象学习总结
    汉诺塔的最简的步骤思路
    3.31作业解答
    初学java 用if语句做几个小程序
    做三个java初期学习的练习Var1~3为头目标
  • 原文地址:https://www.cnblogs.com/JackKing-defier/p/10490383.html
Copyright © 2011-2022 走看看