聊聊数据类型(Data Type)
2020-07-24
0. 前言
上次跟大家聊了一些计算机的基本概念,今天跟大家聊聊数据类型(Data Type)这个基本概念。
1. 数据类型有哪些?
数据类型可以分为三种:
- Primitive(原始型):boolean, integer, float, char..
- Composite(复合型):struct, array, string..
- Abstract(抽象型):tuple, set, stack, queue, graph…
Primitive 是最最基本的类型,就好比乐高积木的一个小正方形颗粒。
Composite 就是把 Primitive 或者 Composite 组合起来的类型。
那 Abstract 是什么类型呢?
这种类型是根据数据的行为特征来定义的(下面会详聊)。
绝大多数情况下,Primitive Type 都是 Value Type。
Value Type vs Reference Type
Value Type(实值型) 和 Reference Type(引用型)有很多区别,之前我做过一个基于 C# 的讲解视频 ,大家感兴趣的话可以去看一下,在此不继续展开。
2. Composite(复合型)
Composite 类型要从两个方面来理解:
1
它用来描述一个包含多个 Primitive 或者 Composite 的数据类型。
比如 string 是 Composite 类型,char 是 Primitive 类型(a 是一个 char,ab 就是一个 string)。
string 的本质上不就是一堆的 char 吗?
于是人们就给【一堆 char】取了个名字,叫 string。
2
本质上,Composite 的排列组合是通过某种数据结构来实现的。
比如 string 的例子里,array 是我们用来组合 char 的数据结构(之后我们会聊数据结构)。
3. Abstract(抽象型)
简称 ADT (Abstract Data Type)。
它基于数据结构的使用者角度,来描述这种数据结构的预期行为。
比如:
- list 是一个 Abstract,它表示的是一些有序的值;我们可以把 list 里面的所有数据一个个拿出来看。
- 一个包含 10 个 string 的 list,我们可以先看看第一个 string 长啥样,再看第二个,直到看完所有的 string。
iterable 指的就是【从头到尾】查看某个数据结构里的【每个成员】的这种特性。
为什么这种数据类型被称为 Abstract 类型呢?
因为这只是一个抽象的想法,只是一种数据结构行为的描述。
所以我们可以用各种各样的数据结构来实现 list 所需要的行为,比如 ‘linked list’ 就是 ‘list’ 的一种实现形式。
还有哪些 Abstract 类型呢?
接下来我们再谈谈另外的几种 Abstract 类型。
假如有 3 个数据排成一排,分别叫做 1 号数据,2 号数据,3 号数据。
1 号数据来的最早,3 号数据到的最晚。
现在我们可以根据两种不同的原则来拿数据:
- 【后进先出】(Last In First Out)原则:3 号,你来的最晚,你先出来!
- 【先进先出】(First In First Out)原则:1 号,你来得最早,你先出来!
根据这两种不同的行为,我们就有了这两个 Abstract 数据类型 —— queue 和 stack。
顾名思义,queue 是排队,也就是先来后到原则,1 号先来的,1 号就应该先出去。
stack 有叠加的感觉,既然是叠上去的,就很难把最下面的那个数据先拿出来,3 号最后一个来的,也是第一个出去的。
另外还有很多 Abstract 类型,比如 Tree, Graph, Set… 在这里暂时不做展开啦。 有一种很重要的 Abstract 类型,叫做 Associative Array(关联数组),我们接下来会讲到。
4. 结语
最后,总结一下本文的核心:
- Data Type(数据类型)分三种,Primitive(原始型),Composite(复合型),Abstract(抽象型)
- Primitive 就是乐高积木的基本颗粒(int, bool, char..)
- Composite 本质上就是用某种数据结构来排列组合 Primitive 和 Composite,然后再给这种组合取个名字(string 等于【一堆 char】)
- Abstract 是用来描述数据的行为的,我们需要用数据结构来实现 Abstract 类型所定义的行为准则
- 顺便还提了一下 queue 和 stack 的区别,一个是先进先出(公平排队!),一个是后进先出
希望大家看完之后有所收获~