目录
一,学习数据结构前置知识
学习数据结构首先我们需要了解集合与数据结构
二,什么是数据结构?
1.什么是数据结构?
一提及数据结构我们就会想到算法,那数据结构和算法有何关系?其实这两个玩意是相辅相成的,一个好的算法离不开好的数据结构,而我们学数据结构的目的就是为了能够体现在算法上,能够更好的应用。
面对数据结构这个词,我们很容易误以为它是什么比较高大上的玩意儿,其实不然,我们可以简单理解成数据 + 结构,主要用来描述和组织数据。比如说,我们有十万个用户信息,那这些信息我们如何去描述和组织起来?答案就是使用数据结构这个东西。
例如:数组就是一种简单的数据结构(数组也是用于描述和组织一组数据)
数据结构又有很多种,在不同的场景使用不同的数据结构会加快我们程序运行的效率。
总结:数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
注意:数据结构是一门单独的学科,它和语言没有关系(博主以后会使用Java来写数据结构),理解思想很重要,它能锻炼你的逻辑思维。
2.容器背后对应的数据结构
该阶段,我们主要学习以下容器,每个容器其实都是对某种特定数据结构的封装,大概了解一下,后序会给大家详细讲解并模拟实现:
1.
Collection
:
是一个接口,包含了大部分容器常用的一些方法
2.
List
:
是一个接口,规范了
ArrayList
和
LinkedList
中要实现的方法
•
ArrayList:
实现了
List
接口,底层为动态类型顺序表
•
LinkedList:实现了
List
接口,底层为双向链表
3.
Stack
:底层是栈,栈是一种特殊的顺序表
4.
Queue
:底层是队列,队列是一种特殊的顺序表
5.
Deque
:是一个接口
6.
Set
:集合,是一个接口,里面放置的是
K
模型
•
HashSet:底层为哈希桶,查询的时间复杂度为
O(1)
•
TreeSet:底层为红黑树,查询的时间复杂度为
O(),关于
key
有序的
7.
Map
:映射,里面存储的是
K-V
模型的键值对
•
HashMap:底层为哈希桶,查询时间复杂度为
O(1)
•
TreeMap:底层为红黑树,查询的时间复杂度为
O(),关于
key
有序
3.相关Java知识
1. 泛型 Generic
2. 自动装箱 autobox 和自动拆箱 autounbox
3. Object 的 equals 方法
4. Comparable 和 Comparator 接口
4.什么是算法?
算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
三,什么是集合?
Java会将一些数据结构封装起来满足我们对一些基础数据结构的需求。而如果集合当中不包含需要使用的数据结构时,这个时候就得我们自己动手写了。
Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes 。
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD 。
例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等。
类和接口总览
整理一下
四,集合框架的重要性
1.
开发中的使用
•
使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码
•
学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景
2.
笔试及面试题
腾讯-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 主要是用来做什么用的?
完.