1. 时间复杂度和空间复杂度
1. 算法效率
1. 大O的渐进表示法
推导大 O 阶方法:1 、用常数 1 取代运行时间中的所有加法常数。2 、在修改后的运行次数函数中,只保留最高阶项。[ O(N^2+N+10) -> O(N^2) ]3 、如果最高阶项存在且不是 1 ,则去除与这个项目相乘的常数。得到的结果就是大 O 阶 [ O(3N) -> O(N) ]
2. 时间复杂度
1. 定义
另外有些算法的时间复杂度存在最好、平均和最坏情况:最坏情况:任意输入规模的最大运行次数 ( 上界 )平均情况:任意输入规模的期望运行次数最好情况:任意输入规模的最小运行次数 ( 下界 )
2. 常见时间复杂度计算举例
打印数组的10个元素: O(1)
打印数组的2N个元素:O(n)
二分查找:O()
冒泡排序:O(N^2)
3. 空间复杂度
1. 定义
空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。
2. 接口
1. 类和接口总览
2. 关系说明
1. 接口 extends 接口
2. 类 implements 接口
1. Collection :用来存储管理一组对象 objects ,这些对象一般被成为元素 elements1. Set : 元素不能重复,背后隐含着 查找 / 搜索 的语义1. SortedSet : 一组有序的不能重复的元素2. List : 线性结构3. Queue : 队列4. Deque : 双端队列
2. Map : 键值对 Key-Value-Pair ,背后隐含着查找/搜索的语义
1. SortedMap : 一组有序的键值对
3. 包装类
1. 包装类的使用
1. 装箱
新建⼀个 Integer 类型对象,将 i 的值放⼊对象的某个属性中
-
IntegerCache.low
和IntegerCache.high
:-
IntegerCache
是Integer
类中的一个内部静态类,用于缓存一定范围内的Integer
对象。 -
low
和high
分别表示缓存的最小值和最大值。默认情况下,low
是-128
,high
是127
(具体值可能因JVM实现或配置而有所不同)。
-
-
缓存检查:
-
if (i >= IntegerCache.low && i <= IntegerCache.high)
:检查传入的int
值i
是否在缓存范围 [ -128 , 127 ] 内。 -
如果在范围内,直接从缓存中返回对应的
Integer
对象:IntegerCache.cache[i + (-IntegerCache.low)]
。-
缓存数组
cache
是一个静态数组,存储了从low
到high
的所有Integer
对象。 -
i + (-IntegerCache.low)
用于计算i
在缓存数组中的索引。
-
-
-
缓存未命中:
-
如果
i
不在缓存范围内,则通过new Integer(i)
创建一个新的Integer
对象并返回。
-
为什么需要缓存?
-
对于小整数(如
-128
到127
),Java通过缓存这些常用的Integer
对象,避免重复创建,从而节省内存和提高性能。 -
这种优化是基于实践中小整数的使用频率较高
int a = 10;
Integer b = a;//自动装箱
Integer c = Integer.valueOf(a);//显示装箱
System.out.println("b = " + b);
System.out.println("c = " + c);

2. 拆箱

Integer k = new Integer(10);
int i = k;//自动拆箱
int j = k.intValue();//显示拆箱
System.out.println("i = " + i);
System.out.println("j = " + j);
