摘要:1.2.6 如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串t,那么s就被称为t的回环变位(circular rotation)。 例如,ACTGACG就是TGACGAC的一个回环变位,反之亦然。 判定这个条件在基因组序列的研究是很重要的。 编写一个程序检查两个给定的字符串s和t是否互为
阅读全文
摘要:总结:本小节讲述了关于设计数据类型的重要知识,包括封装、设计API、算法与抽象数据类型的关系、接口继承、实现继承、等价性、内存管理、不可变性、异常与错误等知识。(“简单看来,下面的许多话题和算法的学习关系不大,因此你可以跳过本节,在今后实现抽象数据类型中遇到特定问题时再回过头来参考它。”) 重点:
阅读全文
摘要:总结:本小节列举了更多抽象数据类型的实现,并讨论了维护多个实现的问题。 重点: 1. 本书中反复出现的一个主题就是我们需要理解各种实现对空间和时间的需求以及它们对各种用例的适用性。 2. 本书的一个主要目标就是深入讨论若干种基本抽象数据结构的实现并衡量他们的性能的不同。 3. 编译时出现 -Xlin
阅读全文
摘要:总结:本小节详细讲解了抽象数据类型的实现过程,包括实例变量、构造函数、实例方法的创建,三种变量的作用域和API、用例与实现。 重点: 1. 如果实例变量在初始化之后不应该再被改变,我们会使用final。 2. 如果没有定义构造函数,类将会隐式定义一个默认情况下不接受任何参数的构造函数并将所有实例变量
阅读全文
摘要:总结:顾名思义。 重点: 1. 几何对象:A natural example of object-oriented programming is designing data types for geometric objects. Point2D.java is a data type for p
阅读全文
摘要:总结:本小节是关于抽象数据类型的综述,包括是什么、为什么、怎么办。 重点: 1. 研究同一个问题的不同算法的主要原因:它们的性能特点不同。 2. API:通过列出所有构造函数和实例方法(及操作)并简要描述它们的功用,说明抽象数据类型的行为。 3. Java中的所有数据类型都会继承toString()
阅读全文
摘要:1.1.27 总结: 递归函数中,当返回值为两个或两个以上、可能多次返回的函数调用时,更好的实现如下: 1.创建递归函数入口a,在a中声明数组,并为数组中的每一位赋值,该值不能等于递归函数的基本情况; 2.创建递归函数b,通过a将数组作为参数传进b。先判断是否基本情况,如果是则直接返回值;再判断对应
阅读全文
摘要:1.1.3 命令行的取参方法: 1.StdIn.readInt(): java XX,运行,输入参数,以空格或换行隔开; 2.Integer.parseInt(args[0]): java XX 参数,以空格隔开,运行。 1.1.6 注意,当运行到g = f - g;这一行时,f已改变。 1.1.8
阅读全文
摘要:总结:本小节讲述了现代编程技术的进一步发展--数据抽象/面向对象编程。 重点: 1.数据抽象的主要思想是鼓励程序定义自己的数据类型(一系列值和对这些值的操作),而不仅仅是那些操作预定义的数据类型的静态方法。 2.我们在本书中“拥抱”数据抽象的原因主要有三: · 它允许我们通过模块化编程复用代码。 ·
阅读全文
摘要:总结:本小节通过二分查找的例子展示本书学习新算法的基本方法,研究新算法的原理、用例、必要性(模拟实际情况)和性能。 重点: 1.二分查找: 2.没有如二分查找或者归并排序这样的高效算法,解决大规模的白名单问题是不可能的。
阅读全文
摘要:总结:本小节讲述了输入输出的知识,包括标准输出、格式化输出、标准输入、重定向与管道、基于文件的输入输出、标准绘图库等。 重点: 1.在我们的模型中,Java程序可以从命令行参数或者一个名为标准输入流的抽象字符流中获得输入,并将输出写入另一个名为标准输出流的字符串中。 2.格式化输出规则: · 常用的
阅读全文
摘要:总结:本小节讲述了字符串的定义,字符串拼接,类型转换,自动转换和命令行参数的知识。 重点: 1.如果加号(+)的一个参数是字符串,那么Java会自动将其他参数都转换为字符串(如果他们不是的话)。这种机制使我们能够通过一个空字符串""将任意数据类型的值转换为字符串值。 2.在第5章我们会深入学习处理字
阅读全文
摘要:总结:本小姐讲述了API的定义、作用以及一些Java库的举例。 重点: 1.API的目的是将调用和实现分离:除了API中给出的信息,调用者不需要知道实现的其他细节,而实现也不应考虑特殊的应用场景。
阅读全文
摘要:总结:本小节讲述了静态方法的定义,调用静态方法产生的结果,几点方法的性质,递归,基础编程模型以及模块化编程的含义。 重点: 1.本书中的所有Java程序要么是数据类型的定义,要么是一个静态方法库。在许多语言中,静态方法被称为函数,因为他们和数字函数的性质类似。 2.方法需要参数(某种数据类型的值)并
阅读全文
摘要:总结:本小节讲述了数组的含义、创建数组的三个步骤、典型的数组处理代码、起别名及二维数组的内容。 重点: 1.在创建数组时,需要指定数组的长度(元素的个数)。我们需要在运行时明确地创建数组的原因是Java编译器在编译时无法知道应该为数组预留多少空间(对于原始类型则可以)。 2. for语句初始化了数组
阅读全文
摘要:总结:本小节讲述了清晰、优雅和高效的代码经常会使用的简便写法。 重点: 1.for (<initialize>; <boolean expression>; <increment>) { <block statements> } 除了几种特殊情况之外,这段代码都等价于: <initialize> w
阅读全文
摘要:总结:本小节讲述了六种Java语句的作用,补充break和continue语句。 重点: 1.程序就是由一系列声明、赋值、条件、循环、调用和返回语句组成的。 2.Java是一种强类型的语言,因为Java编译器会检查类型的一致性(例如:他不会允许将布尔类型和浮点类型的变量相乘)。
阅读全文
摘要:总结:本小节讲述了4种Java最基本的原始数据类型的含义,详细说明表达式、类型转换和比较的各种情况。 重点: 1.初级运算的关键性质:运算产生的数据的数据类型和参与运算的数据的数据类型是相同的。 2.Java规范的运算符优先级:在逻辑运算符中,!拥有最高优先级,之后是&&,接下来是||。 3.因为不
阅读全文
摘要:开始之前,引用书中的一段话: “学习算法的主要原因是它们能节约非常多的资源,甚至能够让我们完成一些本不可能完成的任务。在某些需要处理上百万个对象的应用程序,设计优良的算法甚至可以将程序运行的速度提高数百万倍。在本书中我们将在多个场景中看到这样的例子。与此相反,花费金钱和时间去购置新的硬件可能只能将速
阅读全文