数组的概述
- 多个相同类型数据按照一定的顺序排列的组合
常见概念
- 数组名
- 下标(索引)
- 元素
- 数组的长度
一维数组的使用
声明和初始化
int[] a; // 声明
a = new int[]{1,2,3,4}; // 静态初始化
String[] s = new String[5] // 动态初始化
获取指定位置的元素
通过索引下标 (从0开始到数组长度-1结束)
a[0] // 1
a[1] // 2
长度的获取
属性:length
a.length // 4
遍历数组
for(int i = 0 ; i < a.length ; i ++ ){
System.out.println(a[i]);
}
数组的默认初始化值
整型:0
- 浮点型:0.0
- char型:0 或者 ‘\u0000’
- boolean型:false
-
数组的内存解析
内存的简化结构
练习题1:
升景坊单间短期出租4个月,550元/月(水电煤公摊,网费35元/月),空调、卫生间、厨房齐全。
屋内均是IT行业人士,喜欢安静。所以要求来租者最好是同行或者刚毕业的年轻人,爱干净、安静。
求联系方式:
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int [] { 8,2,1,0,3 };
int[] index = new int [] { 2,0,3,2,4,0,1,3,2,3,3};
String tel = "";
for(int i = 0 ; i < index.length ; i ++ ){
tel += arr[index[i]];
}
System.out.println("联系方式:" + tel);
}
}
联系方式:18013820100
练习题2:
从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
假设依次输入:56 74 89 41 89
package pers.zyx.exer;
import java.util.Scanner;
import static sun.swing.MenuItemLayoutHelper.max;
public class ArrayDemo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入学生的个数:");
int number = input.nextInt();
int[] arr = new int [number];
int maxScore = -1;
System.out.println("请输入学生的成绩");
for(int i = 0 ; i < number ; i ++ ){
arr[i] = input.nextInt();
maxScore = max(maxScore , arr[i]);
}
System.out.println("最高分: " + maxScore);
for(int i = 0 ; i < number ; i ++ ){
System.out.print("Student" + i + " score is " + arr[i] + " grade is ");
if (arr[i] >= maxScore - 10) {
System.out.println("A");
}
else if (arr[i] >= maxScore - 20){
System.out.println("B");
}else if (arr[i] >= maxScore - 30){
System.out.println("C");
}else{
System.out.println("D");
}
}
}
}
请输入学生的个数:
5
请输入学生的成绩
56 74 89 41 89
最高分: 89
Student0 score is 56 grade is D
Student1 score is 74 grade is B
Student2 score is 89 grade is A
Student3 score is 41 grade is D
Student4 score is 89 grade is A
多维数组的使用
声明和初始化
int[][] arr = new int[][]{{1,2,3,4},{4,5,6,7},{7,8,9,10}}; // 静态初始化
String[][] s = new String[3][2] // 动态初始化
获取指定位置的元素
arr[0][0] // 1
arr[2][1] // 8
长度的获取
arr.length // 4
arr[1].length // 3
遍历数组
for(int i = 0 ; i < arr.length ; i ++ ){
for(int j = 0 ; j < arr[i].length ; j ++){
System.out.println(arr[i][j]);
}
}
数组的默认初始化值
int[][] arr = new int[3][2]
arr[0] // 0行的地址
arr[0][0] // 0
数组的内存解析
举例:int[][] arr = new int[4][];
arr[1] = new int[]{1,2,3,4};
练习题1:
获取arr数组中所有元素的和。
package pers.zyx.exer;
public class ArrayDemo {
public static void main(String[] args) {
int[][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}};
int sum = 0;
for(int i = 0 ; i < arr.length ; i ++ ){
for(int j = 0 ; j < arr[i].length ; j ++ ){
sum += arr[i][j];
}
}
System.out.println(sum);
}
}
54
练习题2:
使用二维数组打印一个 10 行杨辉三角。
提示
- 第一行有 1 个元素, 第 n 行有 n 个元素
- 每一行的第一个元素和最后一个元素都是 1
- 从第三行开始, 对于非第一个元素和最后一个元
素的元素。即:
yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
public class ArrayDemo {
public static void main(String[] args) {
int[][] arr = new int[10][];
for(int i = 0 ; i < 10 ; i ++ ){
arr[i] = new int[i + 1];
arr[i][0] = 1;
arr[i][i] = 1;
if( i > 1){
for(int j = 1 ; j < arr[i].length - 1 ; j ++ ){
arr[i][j] = arr[i - 1][j -1 ] + arr[i - 1][j];
}
}
}
for(int i = 0 ; i < 10 ; i ++ ){
for(int j = 0 ; j < arr[i].length ; j ++ ){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
排序算法
排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
插入排序 | O(n^2) | O(n^2) | O(n) | O(1) | 稳定 |
希尔排序 | O(n^1.3) | O(n^2) | O(n) | O(1) | 不稳定 |
选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 不稳定 |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 |
冒泡排序 | O(n^2) | O(n^2) | O(n) | O(1) | 稳定 |
快速排序 | O(nlog2n) | O(n^2) | O(nlog2n) | O(nlog2n) | 不稳定 |
归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 |
计数排序 | O(n+k) | O(n+k) | O(n+k) | O(n+k) | 稳定 |
桶排序 | O(n+k) | O(n^2) | O(n) | O(n+k) | 稳定 |
基数排序 | O(n*k) | O(n*k) | O(n*k) | O(n+k) | 稳定 |
插入排序
希尔排序
选择排序
堆排序
冒泡排序
快速排序
归并排序
计数排序
桶排序
基数排序
Arrays工具类的使用
java.util.Arrays
类即为操作数组的工具类,包含了用来操作数组的各种方法。
数组使用中的常见异常
- 数组脚标越界异常(ArrayIndexOutOfBoundsException)
空指针异常(NullPointerException)
<br />