方法
方法是一组代码的集合
为了实现代码的复用。重复使用,相同的代码,不需要写多次。
定义方法
语法
必须定义在类里面:
修饰符 返回值类型 方法名(参数列表){
方法体
}
- 修饰符
可以有多个. 修饰符是用来限定方法的适用范围和使用方式。 范围:权限修饰符(public、protected、默认的、private)。 方式:static 静态的、abstract 抽象的、final最终的、synchronized 同步的、native 本地的(C,C++编写的方法)
- 返回值类型
1)void:表示方法没有返回值。
2)基本数据类型:指定方法返回值的类型,要求方法在结束的每一个出口都要提供相应类型的返回值。
返回值是用return来提供的
如果方法没有返回值,可以直接使用return结束方法
-
方法名
方法名是一个标识符!
方法名应该使用小驼峰命名法。 -
参数列表
向方法传递数据的载体。
1)没有参数:()
2)有参数:参数列表要指定参数的类型及名字。多个参数使用逗号分隔。
调用方法
1、 调用
使用方法名+圆括号,参数类型需匹配
2、实参和形参
形参(形式参数):方法声明时,参数列表中的参数
实参(实际参数):方法调用时,传递的实际参数。
将实参的值,赋值给形参。
递归调用
在方法的内部,调用了方法自己。
递归通常都可以转换成循环。
递归更容易理解,在JVM中递归地调用不能是无限的。
循环不如递归更容易理解,但是它是可以无限循环的。
当递归层次过多时,会出现栈溢出错误。
当方法被调用是,方法将绘入栈。栈时一块内存。
重载
概念:
在一个类中,出现了方法名相同,但是参数列表不同的方法,这就是叫方法的重载!
调用:
调用重载方法时,根据实参的数据类型,寻找最为匹配的方法进行调用。
重载的要求:
参数列表不同:1)参数的数量不同、2)类型不同、3)顺序不同
不构成重载:1)参数名不同、2)返回值类型不同
数组
数组的概念和特点
概念:数据是一个可以保存多个相同类型元素的集合。
特点:
1)内存连续。数组中的元素在内存中紧挨着。
有序性,元素前后顺序有序。
2)大小固定。数组一旦创建,大小就不能改变。
数组的定义和初始化
语法:
数据类型[] 数组名;(------推荐使用------) 数据类型 数据名[]; (兼容C、C++)
初始化
1)动态初始化
数组名= new 数据类型[长度];
- new:为一个对象分配内存空间。
- 数据类型要与数组定义是的数据类型像相一致
- 长度:数组中可以保存的元素的数量。
- 可以通过类型和长度,就可以计算他的内存空间
- 动态初始化时,会为数组中的每一个元素提供一个类0的初始值
- 基本类型的变量,保存的时具体的值
引用类型的变量。保存的是对象的引用、是对用的地址
数据类型 | 类0值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0 |
doubke | 0.0 |
char | ‘0’ |
boolean | false |
引用 | null |
2)静态初始化
语法:
数组名=new 数据类型[]{元素1,元素2,...,元素n}
-数组的长度由{}的元素的数量决定数据类型[] 数组名={元素1,元素2,元素3,...}
-数组中的每一个元素,都会被初始化为{}中的对应位置的元素
数组中元素的访问
语法:
数组名[下标];
下标:元素在数组中的位置
下标的取值 : 0~len-1
超出下标范围会:ArrayIndexOutOfBoundsException
数组的操作
-
循环赋值:循环生成下标
-
遍历数组
1)循环生成下标方式
2)增强for循环方式、foreach
.
-for(数据类型 变量名:集合){
循环体
}
执行过程:-
1)尝试从集合中取出一个元素
-
2)如果成功取出一个元素,将元素赋值给变量。执行循环体。
-
3)在循环体中,可以用变量访问元素得知
-
4)循环执行完成后,回第一步
-
5)如果无法取出一个元素,说明集合中的元素都已经被去过了。此时循环结束。
-
-
求最值
-
求和、平均值
-
查找元素的位置
-
二分查找算法前提:有序数组
思想:
> 在一个有序数组中。先于数组的中间元素进行比较:
> 查找元素==中间元素:找到了
> 查找元素<中间元素,… ;
> 查找元素>中间元素,… ;
数组的排序
将一个无序的数组,按照制定的规则调整元素的位置,使之变得有序。
十大排序算法
算法 | 时间复杂度 | 空间复杂度 | 是否稳定 | 注意 |
---|---|---|---|---|
冒泡排序 | n^2 | 1 | 稳定 | |
选择排序 | n^2 | 1 | 不稳定 | |
插入排序 | n^2 | n | 稳定 | |
快速排序 | nlogn | logn | 不稳定 | |
希尔排序 | nlogn | 1 | 不稳定 | |
归并排序 | nlogn | n | 稳定 | |
堆排序 | nlogn | 1 | 不稳定 | |
计数排序 | n | k | 稳定 | 数据量不能过大 |
桶排序 | n | n+k | 稳定 | 数据必须要在一定的范围内均匀排布 |
基数排序 | n | n+k | 稳定 |
多维数组
-
定义
>变量定义:数据类型 变量名;
>数组定义:数据类型[ ] 数组名;
>二维数组:数据类型[ ][ ] 数组名;
二维数组定义语法:
数据类型[ ][ ] 数据名;
数据类型[ ] 数组名[ ];
数据类型 数组名[ ][ ]; -
二维数组可以看作每一个元素是一个一维数组
-
初始化:
1)动态初始化
数据类型[ ][ ] 数组名=new 数据类型[一维长度][二维长度];
2)静态初始化
数据名=new 数据类型[][]{}; -
访问元素
数组名[一维下标] :访问一维的元素或者二维数组下的一维数组
数组名[一维下标][二维下标]:访问二维元素 -
操作
1)遍历用嵌套循环遍历二维数组 循环生成下标,foreach
2)最值、求和、平均值、查找、排序等等。
排序:给每一个第二维的数组分别排序,压缩成一维数组进行排序。
3)比较,== 引用类型时,比较两个引用是否指向同一对象,同意内存地址;Arrays.equal()比较两个相同引用对象的内容是否一致。
-
Arrays类
sort toString binarySearch copyOf copyOfRang equal