昨天内容复习
1、限定符:分为两类顶级和成员级
public | package-private | protected | private
public | 空白 | protected | private
2、static 限定符(静态属性/静态方法)
静态属性保存在类(方法区)中
static 最关键作用,就是和对象解绑
(1)静态属性:没有存在对象中,存在类中
(2)静态方法:没有一个隐式的当前对象引用this
(3)静态方法中,无法访问普通属性,无法调用普通方法,无法使用this关键字
(4)静态属性存在并且只存在一份,表现出共享的特性,类似全局变量
3、属性(静态/非静态)的初始化规则
(1)初始化的方式:
静态属性:
1)定义是直接初始化;
2)使用静态代码块初始化
语法:static { 初始化语句 ; }
普通属性:
1)定义时直接初始化
2)初始化代码块初始化
语法:{ 初始化语句; }
3)在构造方法中初始化
(2)时机:
静态属性:类被加载到内存时;
普通属性:对象被实例化时
(3)顺序:
1)类的加载一定发生在对象实例化之前,所以静态属性初始化发生在普通属性的初始化之前
2)静态属性初始化顺序,按照定义时的书写顺序依次初始化
3)普通属性初始化顺序,定义和构造代码块按书写顺序依次进行初始化,构造方法中的初始化一定发生在最后,和书写顺序无关
=========================================================================
数据结构
一、复杂度:粗略衡量算法好坏的刻度尺(工具)
两个维度:
时间复杂度:快慢
空间复杂度:使用空间的情况
1、粗略计算算法的快慢
n:数据的规模
F(n):n的数据规模下,需要的大概基本指令个数
2、引入大O渐进法:O(f(n)) ->与f(n)的区别:
(1)只保留最高次项
(2)保留的最高次项系数化为1
算法的快慢还和最好的情况、平均的情况、最坏的情况:一般优先关注最坏情况,其次平均情况,最好情况关注较少
3、常见的时间复杂度
O(1) O(log(n)) O(n) O(n*log(n)) O(n^2)
4、递归方法的时间复杂度:
画调用栈
5、空间复杂度:
O(F(n)) 在n输入规模的情况下,算法需要的最大的空间情况(额外的)
(1)开辟数组
(2)调用栈
数据结构一般操作:
(1)初始化(构造方法) (2)增 / 删 / 查 / 改(普通方法) (3)销毁(可能不存在)
(2)线性结构:
顺序表、链式表
练习:写一个简单顺序表的初始化、以及增、删(头增/删、尾增/删、)
==
==================================================================
增加顺序表容量不够的操作:
1、先考虑容量怎么样是够用的:
size < array.length
2、容量不够怎么办:
扩大原有的容量;
int newCapacity = array.length*2;
(1)找新家
int[] newArray = new int[newCapacity];
(2)搬家
for(int i=0;i<size;i++){
newArray[i] = array[i];
}
(3)发朋友圈
this.array=newArray;
(4)老房子推掉
原来的数组对象,没有引用指向,变成垃圾了
Java一般不需要特殊处理,垃圾自己会被回收