第一章 引论

  1. 尽量少用mod运算,因为他非常慢
  2. 递归的四条基本法则
    1. 基准情形:必须有某些情形不用递归就能求出,也就是边界
    2. 不断推进:每一次递归的调用必须使状况朝向一种基本情形推进;也就是每一次参数和结果都有所变化,避免死递归;
    3. 设计法则:假设所有递归都能运行
    4. 合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归中做重复性工作,比如斐波那契递归的重复计算问题
      1. 数值计算用递归不是个好主意
  3. 泛型机制:如果除去对象的基本类型外,实现的方法是相同的,那么就可以使用泛型实现
    1. c++中它是用模板来实现泛型编程
    2. java中用Object来表示泛型(1.5之后)
      1. 为了访问这种特定对象的方法,需要进行强制转化成正确的类型
      2. 不能使用基本类型,只有引用类型能够与Object相容
    3. 基本类型的包装
      1. java为8种基本类型提供各自的包装类;int的包装类就是Integer
      2. 每一个包装对象都是不可改变的(状态不能改变),它存储一种当该对象被构建时的原值,并提供一种方法以重新得到该值
    4. 使用接口类型表示泛值
      1. 只有在使用Object类中已有的那些方法能够表示所执行的基本操作时,才能使用Object泛型类型来工作;
      2. 只有实现Comparable接口的那些对象才能够作为Comparable数组的元素被传递
      3. 如果Comparable数组有两个不相容的对象,那么Comparto方法抛出异常 ClassCastException 异常,这是我们期望的性质
      4. 基本类型不能作为Comparable传递,但是包装类可以
      5. 接口究竟是不是标准的库接口倒不是必须的
    5. 数组类型的兼容性:协变数组类型,每一个数组都明了它所允许存储对象的类型。
    6. 但是泛型集合不是协变的
  4. 利用java5泛型特性实现泛型构件
    1. 简单的泛型类和接口
      1. 当指定一个泛型类时,类的声明则包含一个或多个的类型参数,这些参数被放在类名后面的一对尖括号里。
        1.  
              public class GenericMemoryCell<AnyType>{
                   private AnyType storedValue;
                   public AnyType read() {
                        return storedValue;
                   }
                   public void write(AnyType x) {
                        storedValue=x;
                   }
               } 
    2. 自动拆箱、装箱
      1. 如果一个int型被传递到需要一个Integer对象的地方,那么编译器将在幕后插入一个对Integer构造方法的调用,这叫自动装箱
      2. 如果一个Integer对象被放在一个Int型量的地方,则编译器在幕后引入一个对intValue方法的调用,这叫自动拆箱;
    3. 菱形运算符
      1. GenericMemoryCell< Integer> m=new GenericMemoryCell< Integer>();
      2. 在java7后,可简化GenericMemoryCell< Integer> m=new GenericMemoryCell< >();
    4. 泛型static方法:类型参数位于返回参数之前
  5. 对于泛型的限制
    1. 基本类型:基本类型不能做参数
    2. indtanceof检测:
    3. static的语境:static方法和static域均不可引用类的类型变量,因为在类型擦除后类型变量就不见
    4. 不能用new创建类型的实例化
    5. 也不能创建一个泛型的数组
    6. 参数化类型数组的实例化是非法的
 
 
 
posted @ 2020-04-19 21:38  浪波激泥  阅读(102)  评论(0)    收藏  举报