一.算法效率
算法效率分为两种:第一种为时间效率,第二种为空间效率。时间效率称为时间复杂度,空间效率称为空间复杂度。时间复杂主要衡量一个算法的运行速度,空间复杂度主要衡量一个算法所需的 额外的空间(现在不需要特别关注,现在的磁盘空间特别大)。
二.时间复杂度
1.概念:
算法中基本操作的执行次数,为算法的复杂度
2.大O的渐进表示法
算法复杂度存在最好、平均、最坏情况:
最坏情况:任意输入规模的最大运行次数(上界)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数(下界)
例如: 在一个长度为N数组中搜索一个数据x
最好情况:1次找到
最坏情况:N次找到
平均情况:N/2次找到
在实际情况中,我们并不需要精确的执行次数,一般关注最坏情况,用大O的渐进表示法表示
大O的渐进表示法规则:
1、用常数1取代运行时间中的所有加法常数
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
举例:
三.空间复杂度
空间复杂度是算法在运行过程中临时占用存储空间大小(即新增变量的个数)。也使用大O的渐进表示法
举例:
四.包装类(Java最开始讲过)
再Java中,由于基本类型不是继承于Object类,为了在泛型代码中支持基本类型,所以个每个基本类型都对应一个基本类型
1.装箱和拆箱
装箱:将基本类型变为包装类型的过程,分为自动装箱和显示装箱
拆箱:将包装类型变为基本类型的过程,分为自动拆箱和显示拆箱
举例:
注意:
五.泛型
概念:从代码上讲就是对类型实现了参数化
主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。
语法:
利用Object举例:
利用泛型举例:
六.泛型的上界
语法·:
举例:
接口也是如此:
七.泛型方法
语法:
举例:
八.擦除机制
概念:在编译的过程中,将所有的泛型类型T替换成他的上界类型(默认为Object)