首页 > 编程语言 >读编程与类型系统笔记09_泛型数据结构

读编程与类型系统笔记09_泛型数据结构

时间:2023-01-17 09:11:44浏览次数:43  
标签:迭代 09 类型 6.5 泛型 数据结构 数据

1. 恒等函数

1.1. 在代数中,恒等函数指的是函数f(x) = x

1.2. 恒等逻辑与getNumbers()和assembleWidgets()的问题域解耦,因为恒等逻辑和问题域是正交的,或者说是独立的

2. 类型参数

2.1. 将不同函数的区别,即它们的实参类型参数化

2.2. 一个泛型名称的标识符,用作客户端在创建泛型实例时指定的具体类型的占位符

3. 可选类型

3.1. 包含某个类型T的值,或者不包含任何内容

3.2. Optional实现

3.3. 当处理没有赋值的情况时,使用的逻辑与该值的实际类型并没有关系

4. 泛型函数 泛型类

4.1. 泛型函数(value:T) => T,它的类型参数是T

4.2. 当为T指定了实际类型时,就创建了具体函数

5. 泛型类型

5.1. 参数化一个或多个类型的泛型函数、类、接口等

5.2. 允许我们编写能够使用不同类型的通用代码,从而实现高度的代码重用

5.2.1. 让代码的组件化程度更高

5.2.2. 创建独立的、可重用的组件

5.2.3. 使用泛型来避免复制代码

5.2.3.1. 复制从来不是一个好的选择

5.3. Optional类型

5.3.1. 一个简单但是强大的泛型类型

6. 数据结构

6.1. 数据自身

6.2. 数据的形状

6.2.1. 二叉树中,以分层的方式布局数据,每个元素最多有两个子元素

6.2.2. 在链表中,数据是顺序布局的,一个元素在前一个元素的后面

6.3. 一组保留形状的操作

6.3.1. 用来添加或移除元素

6.4. 数据结构把形状赋予数据,而并不需要知道这些数据是什么, 使这些结构成为泛型,就允许为各种值重用形状,从而大大减少需要编写的代码量

6.5. 两个关注点

6.5.1. 数据

6.5.1.1. 数据的类型

6.5.1.2. 数据结构的实例保存的实际值

6.5.2. 数据的形状和保留形状的操作

6.5.3. 解耦关注点

7. 泛型数据结构

7.1. 如果能够从库中选择泛型数据结构,就应该使用库中的泛型数据结构

7.2. 处理数据的布局、形状和任何保留形状的操作

7.3. 数据布局的职责交给独立于任何实际数据内容的泛型数据结构

7.4. 与数据是什么没有关系

7.5. 不能解决全部问题

7.5.1. 仍然需要遍历它们

7.6. 对于分离独立的关注点很有用

8. 迭代器

8.1. 能够用来遍历数据结构的一个对象

8.1.1. 遍历策略和数据结构之间并不需要是一一对应的关系

8.1.2. 提供了一个标准接口,将数据结构的实际形状对客户端隐藏起来

8.1.2.1. 为遍历数据结构提供了公共接口

8.2. 把数据结构和算法连接起来的“胶水”

8.3. 迭代器模式十分有用,所以得到了原生支持

8.3.1. Java中的等效接口也叫作Iterator

8.3.2. 在C#中,等效的接口是IEnumerator

8.4. 在定义数据结构时,应该确保它实现了Iterable

8.5. Iterator代表一个迭代器

8.6. Iterable代表可迭代的东西

8.7. 使用生成器可实现迭代器

8.8. 并非必须是有限的,它们可以无限产生值

9. 生成器

9.1. 是一个可恢复的函数,使用yield语句返回控制权,并且当再次被调用时,会从上一次离开的状态恢复执行

9.2. 生成器返回一个IterableIterator,所以我们可以直接在for...of循环中使用它们,或者用它们来实现一个数据结构的Iterable接口

9.2.1. 大部分主流编程语言都有一个等效的特殊类型,用来支持一个能够遍历元素的for循环

9.3. 在实现遍历逻辑时,考虑使用yield

9.3.1. 它通常可以让代码变得更加整洁

9.3.2. Java中没有内置的yield语句

9.3.3. C#支持yield语句

10. 数据流

10.1. 无限数据流的例子

10.1.1. 从键盘读取字符

10.1.2. 从网络连接获取数据

10.1.3. 收集传感器数据

10.2. 把函数链接成处理管道,在可能无限的数据流上运行它们

11. 处理管道

11.1. 通过使用接受和返回迭代器的函数,能够构建处理管道

11.1.1. 一些函数,它们接受一个迭代器作为实参,进行一些处理,然后返回一个迭代器

11.1.2. 这种函数可以链接起来,在收到数据时处理数据

11.2. 反应式编程的基础

11.3. 迭代器是关键,因为它们使我们能够逐个处理值

11.4. 是延迟计算的

标签:迭代,09,类型,6.5,泛型,数据结构,数据
From: https://www.cnblogs.com/lying7/p/17056944.html

相关文章

  • 数据结构 玩转数据结构 9-3 创建线段树
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13845 1重点关注1.1创建线段树见3.1 1.2代码如何引入方法见3.1 2......
  • Java面试题Day09
    1.创建线程的三种方法(1)继承Thread类,重写父类run()方法.(2)实现runnable接口(3)使用ExcutorService,Callable,Future实现有返回结果的多线程(JDK1.5以后)2.多线程同......
  • 【ES6】JS的Set和Map数据结构
    【ES6】JS的Set和Map数据结构​​一、Set​​​​1、基本用法​​​​2、4种操作方法​​​​3、4种遍历方法​​​​4、Set的应用​​​​1)Set转化为数组​​​​2)去除数组......
  • hbuilderx 项目上传至git 私库 gitea20220908
    1、搭建git私库[gitea]   2、hbuilderx 新建项目oapm  3、初始化的项目本地仓库:项目oapm进入项目本地文件夹根目录右键GitBash,输入入命令:gitinit   项目本地......
  • C/C++数据结构题目[2023-01-16]
    C/C++数据结构题目[2023-01-16]以下内容二选一题目1:校园导航系统的设计与实现问题描述:校园导航系统能够提供校园内场所信息和路径查询。以传媒大学校园为例,校园内包......
  • 跳跃表数据结构与算法分析
    作者:京东物流纪卓志目前市面上充斥着大量关于跳跃表结构与Redis的源码解析,但是经过长期观察后发现大都只是在停留在代码的表面,而没有系统性地介绍跳跃表的由来以及各种常量......
  • ncnn 加载 bin文件时,出错 报异常 0xC0000094:Integer division by zero。
    这次转yolov8.pt到onnx到ncnn,调用ncnn,加载bin文件时出错报异常0xC0000094:Integerdivisionbyzero。解决方式:导出onnx时,加 device="cpu" ......
  • 跳跃表数据结构与算法分析
    作者:京东物流纪卓志目前市面上充斥着大量关于跳跃表结构与Redis的源码解析,但是经过长期观察后发现大都只是在停留在代码的表面,而没有系统性地介绍跳跃表的由来以及各种......
  • P1972 [SDOI2009] HH的项链
    题目传送门题意分析题目部分本题核心:如何判断一个区间内的贝壳是否重复?当右端点\(r\)固定时,不论\(l\)取何值,对于任意一组重复的贝壳,都可以只统计最右端的贝壳。原......
  • java基础09 逻辑运算符、位运算符
    逻辑运算符、位运算符逻辑运算符逻辑运算符:&&与(and)、||或(or)、!非(not)​短路运算:可以提前判定结果的情况下不再继续执行后面的内容位运算符位运算符:&、|、~......