数组排序:
冒泡排序
选择排序
插入排序
将数组分成两部分,将后部分的第一个元素,
和前部分的每一个元素进行比较,然后插入到合适的位置
7,9|3,6,1
快速排序
7,9,3,6,1
1 , 3, 7,6,9
6
归并排序
希尔排序
...
冒泡排序:
每一轮比较相邻的两个元素,小的在前,大的在后
int[] arr = {9,7,3,6,1} length(5)
for(int i = 0; i < arr.length -1){
for(int j = 0; j < arr.length -1 -i ;j ++){
}
}
第一轮:9,7,3,6,1 -> i = 0
arr[j] > arr[j + 1]
1: 7,9,3,6,1 -> j =0 arr[0] 和 arr[1]
2: 7,3,9,6,1 -> j =1 arr[1] 和 arr[2]
3: 7,3,6,9,1 -> j =2 arr[2] 和 arr[3]
4: 7,3,6,1,9 -> j =3 arr[3] 和 arr[4]
第二轮:7,3,6,1,9 i = 1
1: 3,7,6,1,9 -> j =0
2: 3,6,7,1,9 -> j =1
3: 3,6,1,7,9 -> j =2
第三轮:3,6,1,7,9 i = 2
1: 3,6,1,7,9 -> j =0
2: 3,1,6,7,9 -> j =1
第四轮:3,1,6,7,9 i = 3
1: 1,3,6,7,9 -> j =0
________________________________________
选择排序:
每一轮都找出最大(最小值),放在数组最后(最前)
int[] arr = {9,7,3,6,1} length(5)
for(int i = 0; i < arr.lenth - 1; i++){
for(int j = 1; j < arr.length - i; j++){
}
}
第一轮:9,7,3,6,1 -> 结果: 1,7,3,6,9
i = 0
j = 1 ~ 4
int index = arr[0]
1: arr[index] 和 arr[1],
arr[1] 和 arr[index]
得出最大值,定义一个变量arr[index] = arr[0]
2: arr[2] 和 arr[index]
得出最大值,arr[index] = arr[0]
3: arr[3] 和 arr[index]
得出最大值,arr[index] = arr[0]
4: arr[4] 和 arr[index]
得出最大值,arr[index] = arr[0]
交换位置: arr[index] 和 arr[length - 1 - i]
第二轮:1,7,3,6,9 -> 结果: 1,6,3,7,9
i = 0
j = 1 ~ 3
1: arr[0] 和 arr[1]
得出最大值,arr[index] = arr[1]
2: arr[2] 和 arr[index]
得出最大值,arr[index] = arr[1]
3: arr[3] 和 arr[index]
得出最大值,arr[index] = arr[1]
交换位置: arr[index] 和 arr[length - 1 -i]
第三轮:1,6,3,7,9 -> 结果: 1,3,6,7,9
i = 0
j = 1 ~ 2
1: arr[0] 和 arr[1]
得出最大值,arr[index] = arr[1]
2: arr[2] 和 arr[index]
得出最大值,arr[index] = arr[1]
交换位置: arr[index] 和 arr[length - 1 -i]
第四轮:1,3,6,7,9 -> 结果: 1,3,6,7,9
i = 0
j = 1
1: arr[0] 和 arr[1]
得出最大值,arr[index] = arr[1]
交换位置: arr[index] 和 arr[length - 1 -i]
_________________________________________
复习:
1.变量
使用前:声明 + 初始化
声明: 类型 + 变量名
2.类型: 基本数据类型 + 引用数据类型
基本数据类型: 8个
整型:byte/short/int/long
-2 ^ 15 ~ 2 ^ 15-1
浮点:float/double
布尔:boolean
字符:char
0 ~ 65535
二进制:
原码:
反码:
补码:
3.运算符:
逻辑运算符
& &&
| ||
算数运算符
三目运算符
boolean表达式 ? true : false
位运算符
&: 0 和 1 与上都是0
|: 0 和 1 或上都是1
^: 相同为0,不同为1
位移运算符
>> >>>
赋值运算符
比较运算符
4.逻辑控制语句
顺序
分支
if
if - else
if - else if -else
switch/case
循环
for
while
do - while
5.数组
声明 + 初始化
初始化方式:
两种静态赋值
一种动态赋值
int[] arr = new int[5];
依次获取数组中的元素 -> 数组的遍历
数组的属性: length
数组下标范围: 0 ~ length -1
数组的扩容 -> 数组的复制
数组的复制:
Arrays.copyOf()
System.arrayCopy()
数组排序:
6.JVM内存:
方法区: 类相关的信息
方法栈: 局部变量/临时变量
堆: 引用类型的真正数据,对象
类加载:将类文件中类相关的信息加载到JVM内存中的方法区的过程
7.方法:
修饰词 + 返回值类型 + 方法名 + 方法参数 + 方法体
使用方法的目的: 代码的复用
_________________________________________________
面向对象: OOP
java -> 一切皆对象
1.类和对象
1)对象:符合类的特征独立存在的个体
真实存在
2)类:所有同种类型的对象所有的特征/行为,抽象出来成为类
类是不真实存在的.
例如: 学生类 - 实体类
学生的特征: 属性/成员变量
姓名,学号,性别,年龄...
学生的行为: 成员方法
吃饭 睡觉 学习
3)类和对象的关系:
写java代码的时候: 先有类,才有对象
从逻辑分析:先有对象,在有类
2.类的定义:
1)分类:
a. 有实际意义的类 - 实体类
例如: 人/桌子/学生...
b. 没有实际意义的类
作用: 放主方法
2)定义实体类:
成员变量
有默认初始值:
引用数据类型: null
基本数据类型: 0
成员方法
3)类的使用
a.创建类的对象 - 在主方法中创建
b.调用类的成员变量
对象名(引用名).name
c.调用类的成员方法
对象名(引用名).sleep()
通过 对象名. 来调用
3.局部变量和成员变量的区别:
1)声明位置的区别:
局部变量: 在方法中声明
成员变量: 类中声明
2)初始化的区别:
局部变量:
使用前必须初始化
成员变量:
可以不用初始化,因为有默认初始值
3)个数的区别:
局部变量:
由声明个数决定,声明多少个局部变量就有多少个
成员变量:
由对象决定
4)在JVM内存中的区别
局部变量: 在方法栈中,方法结束,方法栈消失,局部变量消失
成员变量:
和对象一起,存在堆中
注意: 类只加载一次,并且是在第一次创建类的对象之前,就已经加载到方法区中.
命名规范:
1.变量名:
a.只能出现: 英文 + 数组 + _ + $
b.不能以数字开头
c.可读性要好,第一个单词小写,第二字单词开始首字母大写
2.包名: 全小写 ,域名倒写
3.方法名: 小驼峰命名法,第一个单词小写,第二字单词开始首字母大写,可读性要好
4.类名: 首字母大写
String Math Scanner Arrays
1.对象内存图
2.方法参数是基本数据类型
3.方法参数是引用数据类型