集合框架
1.什么是集合框架
Java中已经实现的一些集合类(一些已经由Java实现的数据结构)
2.一些常见的误区:
Java的数据结构和C的数据结构的区别:实现的语言不同
数据库和数据结构
数据库:存放数据,c底层会用到数据结构
数据结构:数据+结构,用来组织一组数据的方式
3.类和接口总览
时间和空间复杂度
数据结构和算法是相辅相成的
算法效率分析有两种:时间效率(被称为时间复杂度)
空间效率(被称为空间复杂度,随着空间造价成本的降低,不在特别关注)
时间复杂度:在计算机科学中,算法的时间复杂度是一个数学函数,一个算法所花费的时间与其中语句的执行次数成正比,算法中基本操作的执行次数为算法的时间复杂度
不需要精确的执行次数,只需大概的执行次数,这里我们使用大O的渐进表示法
大O符号:用于描述函数渐进行为的数学符号
1.用常数1取代运行时的加法常数
2.在修改后的运行次数函数中只保留最高阶项
3.如果最高阶存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶
我们常说的复杂度是指在最坏情况下
求复杂度一定要结合算法的思想
二分查找:x=log2N
递归的时间复杂度:递归的次数*每次递归执行的次数
空间复杂度算的是变量个数,也采用大O的渐进表示法
以后遇到的复杂度:
O(1)<O(logN)<O(N)<O(N*logN)<O(N*2)
包装类和简单认识泛型
包装类
在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型一个包装类型
int—Integer,char—Character
其余都是首字母大写
装箱/装包(把基本数据类型变成包装类型的过程) 自动装箱 显示装箱
拆箱/拆包 (把包装类型变成基本数据类型的过程) 自动拆包 显示拆箱
下面一个例子
public static void main(String[] args) {
Integer a=100;
Integer b=100;
System.out.println(a==b);
Integer c=200;
Integer d=200;
System.out.println(c==d);
}
这是因为底层调用了valueOf的方法,这个方法是有范围的,在-128到127,可以直接转换,不在的话会返回新对象,所以第二个结果为false
泛型
泛型:适用于许多许多类型(对参数实现了参数化)编译时自动检查和转换
泛型指定当前的容器,捕捉什么类型的对象
语法
class 类名<T>
<E> E只能写类型,占位符,表示当前类型是一个泛型
类型推导:根据上下文推导
这是编译时期的一种机制,JVM中无泛型的概念
泛型的上界
语法:
class泛型类名称<类型形参extends 类型边界>
如果未指定认为继承了object