一. 简单认识集合框架

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes 。

其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD 。

例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等。

这些常见的集合(比如:ArrayList 顺序表, LinkedList 链表,stack 栈, queue 队列, priorityQueue 优先级队列(堆) 等)都需要我们去学习进而使用, 要想学会这些集合框架,需要我们学习其背后的数据结构知识。

集合框架的重要性(笔试及面试题):

腾讯-Java后台开发面经
1. HashMap 了解不,介绍一下,如果一个对象为 key 时,hashCode 和 equals 方法的用法要注意什么?
2. HashSet 和 HashMap 的区别是什么?
3. HashMap 是线程安全的么?那需要线程安全需要用到什么?
阿里巴巴-Java后台开发面经
1. ArrayList 和 LinkedList 的区别是什么?
2. 有了解过 HashMap 的具体实现么?
3. HashMap 和 ConcurrentHashMap 哪个效率更高?
今日头条-Java后台开发面经
1. 编程题:判断一个链表是否是一个回文链表。
2. Redis 的 zset 类型对应到 java 语言中大致是什么类型?
3. hashCode 主要是用来做什么用的?

二. 背后所涉及的数据结构和算法

1. 什么是数据结构

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

2. 什么是算法

算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

3. 算法效率

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。

在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

三. 时间复杂度

1. 时间复杂度的概念

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。

2. 大O渐进表示法

// 请计算一下func1基本操作执行了多少次?
void func1(int N){int count = 0;for (int i = 0; i < N ; i++) {for (int j = 0; j < N ; j++) {count++;}}for (int k = 0; k < 2 * N ; k++) {count++;}int M = 10;while ((M--) > 0) {count++;}System.out.println(count);
}

Func1 执行的基本操作次数 :

  • N = 10 F(N) = 130

  • N = 100 F(N) = 10210

  • N = 1000 F(N) = 1002010

实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这里我们使用大O的渐进表示法。

大O符号(Big O notation):是用于描述函数渐进行为的数学符号。

推导大O阶方法:

1、用常数1取代运行时间中的所有加法常数。

2、在修改后的运行次数函数中,只保留最高阶项。

3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

使用大O的渐进表示法以后,Func1的时间复杂度为:

  • N = 10 F(N) = 100

  • N = 100 F(N) = 10000

  • N = 1000 F(N) = 1000000

通过上面我们会发现大O的渐进表示法去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数。

另外有些算法的时间复杂度存在最好、平均和最坏情况:

最坏情况:任意输入规模的最大运行次数(上界)

平均情况:任意输入规模的期望运行次数

最好情况:任意输入规模的最小运行次数(下界)

例如:在一个长度为N数组中搜索一个数据x

最好情况:1次找到

最坏情况:N次找到

平均情况:N/2次找到

在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)

3. 计算实例

【DS】三分钟带你学会时间(空间)复杂度相关推荐

  1. 三分钟带你学会修改VS的默认对齐数

    前言 上期博客博主已经细致地讲解了c语言中结构体大小的计算(不清楚的道友可以点击头像,看上一期细致内容),其中最重要的就是结构体内存对齐,而结构体内存对齐中最重要的就是对齐数,即变量大小和编译器默认对 ...

  2. mysql和oracle冲突吗_三分钟带你分清MySQL 和Oracle之间的误区

    原标题:三分钟带你分清MySQL 和Oracle之间的误区 来自:华为云开发者社区 摘要:MySQL和Oracle,别再傻傻分不清. MySQL 和Oracle 在开发中的使用是随处可见的,那就简单去 ...

  3. 10分钟带你学会微信小程序的反编译

    以xxxxx小程序为例10分钟带你学会微信小程序的反编译 2019-11-28 12:59:26 以一个简单的例子介绍下小程序反编译操作流程 实验环境 前置准备 模拟器内软件安装 获取小程序包 开始解 ...

  4. 三分钟带你看懂prototype原型——ES6进阶

    三分钟带你看懂prototype原型--ES6进阶 1. prototype 定义 2. new 构造函数 3. 存储 4. prototype 作用 1. prototype 定义 在JS中的类的实 ...

  5. 元件怎么反转_电气图纸怎么看?三分钟教你学会看懂,受用一生

    图纸一般用于设计方面,设计师绘制出图纸,我们再根据图纸进行操作,尤其是电气图纸,上面有很多符号,很难看懂,下面通过三分钟教你学会看懂电气图纸. 一.什么是电气图 用电气图形符号.带注释的围框或简化外形 ...

  6. 三分钟带你看懂HDMI接口的PCB设计

    三分钟带你看懂HDMI接口的PCB设计 本文主要讲解的是HDMI的设计,包括作用和运用的总结,希望大家看了以后能轻松的应对各种HDMI方案的PCB设计. 一.什么是HDMI? 高清晰度多媒体接口(英文 ...

  7. 三分钟带你读懂 BERT

    本文为 AI 研习社编译的技术博客,原标题 : BERT Technology introduced in 3-minutes 作者 | Suleiman Khan, Ph.D. 翻译 | 胡瑛皓.s ...

  8. 三分钟带你弄懂slot插槽——vue进阶

    文章目录 三分钟带你弄懂slot插槽--vue进阶 一.概述 程序员之死 什么是 slot插槽? 2.6.0 版本中的 slot 二.具名插槽 例子 效果图 代码 三.小惊喜 三分钟带你弄懂slot插 ...

  9. 入门必看 | 三分钟教你学会操作台式万用表

    入门必看 | 三分钟教你学会操作台式万用表 入门必看 | 三分钟教你学会操作台式万用表

最新文章

  1. 004_常用词汇句子翻译记录
  2. PCL:超详细的基于法向量和曲率的区域生长算法原理以及源码解读
  3. 正则表达式的兼容性问题
  4. html5仿浏览器,前端H5-仿QQ浏览器for mac之动画效果(一)
  5. 2. 两数相加(中等)
  6. 关于低代码自定义表单的思路和想法
  7. Redis为什么变慢了?一文详解Redis性能问题 | 万字长文
  8. lnmp修改mysql上传大小限制_安装Linux+Nginx+MySQL+PHP(LNMP)集成环境,解除上传文件大小限制...
  9. 西安科技大学计算机学院保研,独臂姑娘,好样的!
  10. 大数据应用现状:从发现价值到创造价值
  11. Bitwise AND of Numbers Range
  12. 网站安全测试报告模板
  13. FFS学习 (FTL)
  14. 汽车诊断系统总线协议规范知识汇总
  15. 【CI/CD】详解自动化开发之CI/CD(持续集成、持续交付、持续部署)
  16. oracle语法基础
  17. HTML超链接QQ在线聊天
  18. Android开发——错误:远程主机强迫关闭一个现有连接——解决办法
  19. 【Socket编程】Python实现一个服务端,多个客户端接入
  20. oracle表空间datafile,orale tablespacedatafile -- oracle表空间

热门文章

  1. Via浏览器怎么查看网页源码
  2. xpath 准确匹配 跟 模糊匹配属性
  3. URLRewrite实现url地址伪静态化
  4. 2007-08-03 16:04 unresolved external symbol Direct3DCreate9
  5. 常见损失函数 损失函数选择方法
  6. Android5.0以上系统的移动网络开关
  7. 实例10 等差数列求和
  8. PPT基础(二十二)裁剪图片
  9. Mac使用Docker安装artemis
  10. 神经网络 深度神经网络,图神经网络和神经网络