《算法(第4版)》要点摘录

  1. 第1章 基础
    1. 1.1 基础编程模型
    2. 1.2 数据抽象
本书网站:algs4.cs.princeton.edu

第1章 基础

1、算法,即适合用计算机实现的解决问题的方法。(1页)
2、数据结构,即便于算法操作的组织数据的方法。(1页)
3、在计算机科学领域,我们用算法这个词来描述一种有限、确定、有效的并适合用计算机程序来实现的解决问题的方法。(1页)
4、图的主要内容是对象和它们的连接。(3页)

1.1 基础编程模型

1、把描述和实现算法所用到的语言特性、软件库和操作系统特性总称为基础编程模型。(4页)
2、一段 Java 程序(类)或者是一个静态方法(函数)库,或者定义了一个数据类型。(4页)
3、Java 语言的 7 种语法:(4页)
(1)原始数据类型;
(2)语句:声明,赋值,条件,循环,调用和返回六种;
(3)数组;
(4)静态方法;
(5)字符串;
(6)标准输入/输出;
(7)数据抽象。
4、把输入命令执行程序的环境称为虚拟终端。(4页)
5、要执行一个 Java 程序,首先需要用javac命令编译它,然后再用java命令运行它。(5页)
6、数据类型就是一组数据和对其所能进行的操作的集合。(6页)
7、+、—、×、/ 都是被重载过的——根据上下文,同样的运算符对不同类型会执行不同的操作。这些初级运算的关键性质是运算产生的数据的数据类型和参与运算的数据的数据类型是相同的。(6页)
8、异或:相异为真,相同为假。(7页)
9、Java 使用的是中缀表达式:一个字面量(或者一个表达式),紧接着是一个运算符,再接着是另一个字面量(或者另一个表达式)。(7页)
10、在逻辑运算符中,!拥有最高优先级,之后是&&,接下来是||。(7页)
11、转换指的是在表达式中把类型名放在括号里将其后的值转换为括号中的类型。(7页)
12、将浮点型转换为整型将会截断小数部分而非四舍五入。(7页)
13、结果是布尔型的表达式被称为布尔表达式。(7页)
14、变量可以声明在第一次使用之前的任何地方──一般在首次使用该变量的时候声明它。(8页)
15、变量的作用域就是定义它的地方,一般由相同代码段中声明之后的所有语句组成。(8页)
16、在while循环中,break语句表示立即从循环中退出;continue语句表示立即开始下一轮循环。(9页)
17、在赋值语句中将一个二元运算符写在等号之前,等价于将左边的变量放在等号右边并作为第一个操作数。(9页)
18、数组能够顺序存储相同类型的多个数据,访问数组中的某个元素的方法是将其编号然后索引。(10页)
19、在代码中使用数组时,一定要依次声明、创建并初始化数组。(11页)
20、在一个 Java 数组中 double 类型的变量的默认初始值都是 0.0。(11页)
21、数值类型的默认初始值是 0,布尔型的默认初始值是 false。(11页)
22、声明二维数组需要两对方括号,创建二维数组时要在类型名之后分别在方括号指定行数及列数。(12页)
23、静态方法是一组在被调用时会被顺序执行的语句。(12页)
24、方法封装了由一系列语句所描述的运算。方法需要参数(某种数据类型的值)并根据参数计算出某种数据类型的返回值或者产生某种副作用。(13页)
25、每个静态方法都是由签名(关键字 public static 以及函数的返回值,方法名以及一串各种类型的参数)和函数体(即包含在花括号中的代码)组成的。(13页)
26、调用静态方法的方法是写出方法名并在后面的括号中列出参数值,用逗号分隔。(14页)
27、仅由一个方法调用和一个分号组成的语句一般用于产生副作用。(14页)
28、任何静态方法每次都只会返回一个值,即被执行的的第一条返回语句的参数。(14页)
29、方法的返回值可以是 void,这表示该方法没有返回值。称 void 类型的静态方法会产生副作用(接受输入、产生输出、修改数组或者改变系统状态)。(14页)
30、静态方法库是定义在一个 Java 类中的一组静态方法。类的声明是 public class 加上类名,以及用花括号包含的静态方法。存放类的文件的文件名和类名相同,扩展名是.java。(15页)
31、要调用另一个库中的方法,需要在方法前指定库的名称。(16页)
32、角用弧度表示,可以使用 toDegrees()toRadians() 转换角度和弧度。(17页)
33、一个 String 类型的字面量包括一对双引号和其中的字符。(20页)
34、String 类型是 Java 的一个数据类型,但并不是原始数据类型。(20页)
35、字符串的两个主要用途分别是将用户从键盘输入的内容转换成相应数据类型的值以及将各种数据类型的值转化成能够在屏幕上显示的内容。(20页)
36、Java 在连接字符串的时候会自动将任意数据类型的值转换为字符串,我们能够通过一个空字符串 “ “ 将任意数据类型的值转换为字符串值。(20页)
37、终端窗口包含一个提示符%,通过它能够向操作系统输入命令和参数。(21页)
38、使用 printf() 方法时最重要的一点是格式字符串中的转换代码和对应参数的数据类型必须匹配。(22页)
39、向启动程序的命令中加入提示符>,就可以将它的标准输出重定向至一个文件。(24页)
40、将一个程序的输出重定向为另一个程序的输入叫做管道。(24页)
41、a/b 的商会向 0 取整;a%b 的余数的定义是 (a/b)×b + a%b 恒等于 a。(31页)
42、短路求值法则:表达式从左向右求值,一旦整个表达式的值已知则停止求值。(31页)
43、在一个典型的 for 循环中,递增变量一般在循环结束之后都是不可用的;但在和它等价的 while 循环中,递增变量在循环结束之后仍然是可用的。(32页)
44、在 Java 中,一个静态方法不能将另一个静态方法作为参数。(32页)

1.2 数据抽象

1、数据类型指的是一组值和一组对这些值的操作的集合。(38页)
2、Java 编程的基础主要是使用 class 关键字构造被称为引用类型的数据类型。这种编程风格也称为面向对象编程,因为它的核心概念是对象,即保存了某个数据类型的值的实体。(38页)
3、抽象数据类型(ADT)是一种能够对使用者隐藏数据表示的数据类型。(38页)
4、要使用一种数据类型并不一定非得知道它是如何实现的。(38页)
5、实例方法不需要 static 关键字。它们不是静态方法——它们的目的就是操作该数据类型中的值。(39页)
6、Java 中的所有数据类型都会继承 toString() 方法来返回用 String 表示的该类型的值。Java 会在用 + 运算符将任意数据类型的值和 String 值连接时调用该方法。(39页)
7、只要抽象数据类型的源代码 .java 文件和我们的程序文件在同一个目录下,或是在标准 Java 库中,或是可以通过 import 语句访问,该程序就能够使用这个抽象数据类型。(39页)
8、对象是能够承载数据类型的值的实体。所有对象都有三大重要特性:状态、标识和行为。对象的状态即数据类型中的值。对象的标识能够将一个对象区别于另一个对象。对象的行为就是数据类型的操作。(40页)
9、对象的状态可以为用例代码提供信息,或是产生某种副作用,或是被数据类型的操作所改变。(40页)
10、引用是访问对象的一种方式。Java 使用术语引用类型以示和原始数据类型的区别。(40页)
11、要创建(或实例化)一个对象,我们用关键字 new 并紧跟类名以及 ()(或在括号中指定一系列地参数,如果构造函数需要的话)来触发它的构造函数。构造函数没有返回值,因为它总是返回它的数据类型的对象的引用。(40页)
12、可以用同一个类创建无数对象——每个对象都有自己的标识,且所存储的值和另一个相同类型的对象可以相同也可以不同。(40页)
13、我们调用一个实例方法的方式是先写出对象的变量名,紧接着是一个句点,然后是实例方法的名称,之后是 0 个或多个在括号中并由逗号分隔的参数。实例方法可能会改变数据类型中的值,也可能只是访问数据类型中的值。(41页)
14、方法的每次触发都是和一个对象相关的。(41页)
15、静态方法的主要作用是实现函数,非静态(实例)方法的主要作用是实现数据类型的操作。静态方法调用的开头是类名(习惯为大写),而非静态方法调用的开头总是对象名(习惯为小写)。(41页)
16、使用引用类型的赋值语句将会创建该引用的一个副本。赋值语句不会创建新的对象,而只是创建另一个指向某个已经存在的对象的引用。这种情况被称为别名:两个变量同时指向同一个对象。(42页)
17、改变一个对象的状态将会影响到所有和该对象的别名有关的代码。(42页)
18、Java 中的方法只能有一个返回值——有了对象我们的代码实际上就能返回多个值。(43页)
19、在 Java 中,所有非原始数据类型的值都是对象。(43页)
20、运用数据抽象的思想编写代码(定义和使用数据类型,将数据类型的值封装在对象中)的方式称为面向对象编程。(44页)

持续更新中……