复习
- 在实际开发中,如果处理没有规律或者每次次数限制的场景,一般使用的是while;如果处理有明显规律或者次数限制的场景,一般使用的是for
- *组成的三角形
* ** *** **** ***** |
- break和continue
- break表示中止本层循环
- continue表示跳过本次循环,继续下次循环
- break和continue允许对代码进行标号
数组
一、简介
- 数组本质上是一个可以存储多个数据的容器。数组中的数据称之为元素,数组中元素个数称之为数组的长度
- 在定义数组的时候,就需要给定数组的长度。长度给定之后不可变
- 在数组中,将数组中每一个位置给定一个编号,编号称之为下标。下表从0开始
- 数组的格式
格式一: 数据类型[] 数组名 = new 数据类型[长度]; 例如 int[] arr = new int[5]; // 定义一个能够存储5个整型元素的数组arr arr[2] = 10;// 将元素10放到数组下标为2的位置上 |
格式二: 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3...}; 例如 int[] arr = new int[]{2, 5, 9, 1, 6, 7, 5}; // 定义了一个数组arr用于存储整型元素,同时给定了数组中每一个下标上的具体元素 - 这种方式同时还定义了数组的长度 |
格式三 数据类型[] 数组名 = {元素1, 元素2, 元素3...}; 例如 int[] arr = {2, 5, 9, 1, 6, 7, 5}; |
二、数组的内存结构
- 程序要想运行,必然会占用计算机的内存
- Java在运行过程中,将计算机内存进行了逻辑划分,通用划分是将内存分为了5块:栈内存(Stack),堆内存(Heap),方法区(Method Area),本地方法栈(Native Stack),PC计数器(Program Counter)
- 堆内存会对放入其中的元素来自动赋予一个默认值:byte/short/int的默认值都是0,long的默认值是0L,float的默认值是0.0f,double的默认值是0.0,char的默认值是'\u0000',boolean的默认值是false,其他类型的默认值是null
- 数组的内存结构
三、数组的应用
- 获取数组元素 - 数组名[下标]
- 获取数组的长度 - 数组名.length - 数组的最大下标是长度-1
- 数据的遍历 - 如果需要遍历一个数组,只需要依次获取每一个下标
// 数组是arr for(int i = 0; i < arr.length ; i++){ System.out.println(arr[i]); } |
- 获取数组元素中的最值 (最大值/最小值) - 遍历数组,从这个数组中一个个的比较来获取的最大/小值
- 数组元素排序
- 冒泡排序:相邻的两个元素比较,根据规则来决定是否交换两个元素。经过多轮比较将元素变成有序状态 - 时间复杂度是O(n2),空间复杂度是O(1),冒泡排序本身是一种稳定的排序算法
- 选择排序:选定位置之后,将这个位置上的元素和其他元素依次比较。经过多轮比较之后将元素变成有序状态 - 时间复杂度是O(n2),空间复杂度是O(1),选择排序本身是一种不稳定的排序算法
- Java中提供了排序方式:Arrays.sort(数组) - 底层依靠了快速排序来实现的,时间复杂度是O(nlogn)
- 从数组中来获取某一个元素出现的位置
- 如果数组元素无序,那么获取某一个元素出现的下标,只能进行遍历
- 如果数组元素有序,那么采用二分(折半)查找
- 数组翻转
- 数组复制 - 将一个数组中的指定部分的元素复制到另一个数组中