系列文章目录
集合及数据结构第一节————初识集合框架和数据结构
初始集合框架和数据结构
- 什么是集合框架?
- 集合框架的重要性
- 背后所涉及的数据结构以及算法
- 数据结构的基本概念和术语
- 逻辑结构和物理结构
- 数据类型
一、 集合框架的初步认识
1.什么是集合框架?
java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes 。
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD 。
例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等
类和接口总览
Java的集合类和关系不一定只有上图,上图只是描述了部分重要的类和常见的类。
2.集合框架的重要性
1. 开发中的使用
- 使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码
- 学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景
3.背后所涉及的数据结构以及算法( * * )
1 什么是数据结构
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的
集合。
2 容器背后对应的数据结构
该阶段,主要学习以下容器,每个容器其实都是对某种特定数据结构的封装,大概了解:
- Collection:是一个接口,包含了大部分容器常用的一些方法
- List:是一个接口,规范了ArrayList 和 LinkedList中要实现的方法
- ArrayList:实现了List接口,底层为动态类型顺序表
- LinkedList:实现了List接口,底层为双向链表
- Stack:底层是栈,栈是一种特殊的顺序表
- Queue:底层是队列,队列是一种特殊的顺序表
- Deque:是一个接口
- Set:集合,是一个接口,里面放置的是K模型
- HashSet:底层为哈希桶,查询的时间复杂度为O(1)
- TreeSet:底层为红黑树,查询的时间复杂度为O( ),关于key有序的
- Map:映射,里面存储的是K-V模型的键值对
- HashMap:底层为哈希桶,查询时间复杂度为O(1)
- TreeMap:底层为红黑树,查询的时间复杂度为O( ),关于key有序的
3 相关java知识
- 泛型 Generic
- 自动装箱 autobox 和自动拆箱 autounbox
- Object 的 equals 方法
- Comparable 和 Comparator 接口
二、数据结构的初步认识
1.数据结构的基本概念和术语
1. 数据
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。它是计算机中可以操作的对象,是能被计算机识别,接收,处理的所有符号的集合。数据不仅包括整形,浮点型等数值类数据,还包括字符等非数值类数据。
2.数据元素
数据元素(data element)是数据的基本单位,它在计算机中通常被作为一个整体进行处理。
3. 数据项
数据项(data item)是数据的不可分割的最小单位,一个数据元素可以由若干个数据项组成。
4.数据对象
数据对象(data object)是具有相同性质且特征相同的数据元素的集合,是数据的一个子集。
5. 数据结构
在计算机中,数据元素并不是孤立的,杂乱无序的,而是存在特定的逻辑关系,,我们把这种关系叫做数据结构(logic structure)。
2.逻辑结构和物理结构( * )
逻辑结构
1.集合结构
集合结构:集合结构的数据元素之间除了同属于一个集合的关系外,它们没有其他任何关系。
2.线性结构
线性结构:结构中的数据元素之间存在一对一的关系。
3.树形结构
树形结构:结构中的数据元素之间存在一对多的层次关系。
4. 图形结构
图形结构:结构中的数据元素之间存在多对多的关系。
物理结构
数据的存储结构(physical structure)是数据的逻辑结构在计算机内存中的存储方式,又被称为物理结构。它研究的是数据的逻辑结构在计算机中的实现方法,包括数据元素的表示和元素间关系的表示。一种逻辑结构通常可以采用多种存储方式。
1. 顺序存储结构
顺序存储结构(Sequential Storage Structure):数据元素按照其逻辑顺序在内存中连续存储。这是最简单和常见的存储结构,适用于线性表等序列型结构。
2. 链式存储结构
链式存储结构(Linked Storage Structure):数据元素通过指针相互链接,在内存中非连续存储。每个数据元素包含指向下一个元素的指针。链式存储结构适用于动态数据结构,如链表和树。
3. 索引存储结构
索引存储结构(Indexed Storage Structure):通过建立索引表来存储数据元素的地址和关键字,索引表按照关键字的顺序进行排列。通过索引表可以快速找到想要的数据元素。常见的索引存储结构有顺序索引、散列索引等。
4. 散列存储结构
散列存储结构(Hashed Storage Structure):通过散列函数将关键字映射到存储位置。散列存储结构适用于需要通过关键字快速查找元素的情况,如哈希表。
3.数据类型
数据类型定义
数据结构中的数据类型定义是指一组值和操作的集合,其定义包括这些值的种类、它们如何表示、以及对它们执行的操作。例如,在C语言中数据类型分为基本类型和构造类型。基本类型包括整形、浮点型、字符型等,构造类型包括数组、结构、联合、指针、枚举型、自定义类型等。指针数据类型可用于创建更复杂的数据结构,例如数组、链表、栈、队列、树和图等。
抽象数据类型
抽象数据类型(Abstract Data Type,ADT)是指具有特定操作和属性的数据类型,其实现方式并不确定,只是一种抽象的描述。
ADT 的基本定义通常由三个部分组成:
- 数据的表示,描述数据对象的基本元素以及它们之间的关系。
- 数据的操作,描述数据对象上的基本操作,包括建立、销毁、查找、插入、删除等。
- 对数据类型的约束条件,描述数据对象必须满足的条件,包括数据类型的定义域、取值范围、存储分配等。
以下是几个 ADT 的定义和例子:
- 栈(Stack)
数据的表示:栈是一种线性数据结构,可以想象成一堆盘子,只能从最上面取盘子,也只能往最上面放盘子。
数据的操作:栈上的基本操作包括 push(压栈)、pop(弹栈)、top(返回栈顶元素)、isEmpty(判断栈是否为空)、isFull(判断栈是否已满)等。
对数据类型的约束条件:栈通常有一个大小限制,且只能从栈顶进行操作。
- 队列(Queue)
数据的表示:队列也是一种线性数据结构,可以想象成排队,先进先出。
数据的操作:队列上的基本操作包括 enqueue(入队)、dequeue(出队)、front(返回队头元素)、rear(返回队尾元素)、isEmpty(判断队列是否为空)等。
对数据类型的约束条件:队列的大小可能有限制,且只能从队头或队尾进行操作。
- 集合(Set)
数据的表示:集合是一种非线性数据结构,由一组元素构成,元素之间无序,不可重复。
数据的操作:集合上的基本操作包括 add(添加元素)、remove(删除元素)、contains(判断元素是否存在)、size(返回集合大小)、intersection(返回两个集合的交集)等。
对数据类型的约束条件:集合中的元素是无序、不可重复的。