第一章 引论
选择问题:N个数种确定其中第K大的数据;(1)N个数据读入到数组种,进行冒泡等排序方法,并返回位置为k的元素;(2)将前K个元素读取数组种并进行降序排序,然后将剩余元素与之对比,如果大于第k个元素,则插入放置到正确位置,挤出旧第k元素,剩余元素结束返回k元素;(3)字谜问题:输入是一些字母构成的一个二位数组及一组单词组成,目标找出字谜种的单词,单词存放位置可能是水平、垂直或沿对角线上任何方向放置的
当前遇见的问题可能是写出一个工作程序不难,但是如果该程序运行在巨大的数据集上,那么运行时间就是最大的问题;
数学知识复习:
当一个函数用它自身进行定义时就称为递归;(1)基准情形,必须有某些基准的情形,它们不用递归就能求解;(2)不断推进,要递归求解的情形,递归调用必须总能朝着一个基准情形推进。
四种基本法则:(1)基准情形;(2)不断推进;(3)设计法则,假设所有的递归调用都能运行(4)合成效益法则,求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。
实现泛型构建
面向对象的一个重要目标就是对代码重用的支持,支持该目标的机制就是泛型机制:如果除去对象的基本类型,实现方法是相同的,就可以使用泛型实现。Java中通过Object超类实现泛型类,因此只能使用引用类型,只有引用类型才能够与Object相容;
包装类,每个包装对象是不可变的(状态绝对不能改变),它存储一种该对象被构建时所设置的原值,并提供方法重新得到该值。
数组类型的兼容性
假设Emplyee[]是和Person[]兼容的,Person[] arr = new Employee[5] , arr[0] = new Strudent{…};两句都进行编译,arr[0]实际上是Employee引用,但是Student IS-NOT-A Employee,这将产生类型转换异常。
泛型类和接口
泛型类申明内部,可以申明泛型类型的域和使用泛型类型作为参数或返回类型的方法;
泛型接口
泛型方法
类型限界
类型限界在尖括号内指定,它指定参数类型必须具有的性质
类型擦除
泛型类可以通过编译器的类型擦除过程转变成非泛型类,此时,编译器生成一种与泛型类同名的原始类,但是类型参数被删除了;类型变量由类型限界来代替,当具有擦除返回类型的泛型方法被调用的时候,一些特性被自动的插入。
函数对象
一种将函数作为参数传递的方法注意到对象既包含数据也包含方法,于是定义一个没有数据而只有一个方法的类,并传递该类的实例;实际上,一个函数将其放置到一个对象内部而被传递,这样的对象称为函数对象。