什么是数组:
1. 数组是相同数据类型的有序集合。
2. 数组也是对象,数组元素相当于对象的成员变量。
3. 数组长度确定,不可变。
1. 数组的声明和创建
代码示例
package com.baidu.www;
public class test {
public static void main(String[] args) {
// 数组的声明
int[] numbers;
int numbers2[];
// 数组的创建
numbers = new int[10];
// 数组的长度
System.out.println(numbers.length);
// 数组元素的赋值
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
numbers[5] = 6;
numbers[6] = 7;
numbers[7] = 8;
numbers[8] = 9;
System.out.println(numbers[9]);
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println("数组的和值为:"+sum);
}
}
![d2ddbc0ffc662a35aef4d9236c3beb94]()
2. 三种初始化和内存分析
三种初始化:静态初始化、动态初始化、默认初始化。
代码示例
package com.baidu.www;
public class test {
public static void main(String[] args) {
// 静态初始化
int[] a = {1, 2, 3};
System.out.println(a[0]);
// 动态初始化:包含默认初始化
int[] b = new int[3];
b[1] = 20;
System.out.println(b[1]);
}
}
数组是在堆中的
![40d65278c3b2edbf5cf7eeef895064e6]()
3. 数组的使用
(1)普通的for循环
(2)For-Each循环
(3)数组作方法入参
(4)数组作返回值
代码示例
package com.baidu.www;
public class test {
public static void main(String[] args) {
int[] arrays = {1, 2, 3, 4, 5};
// // 打印全部的数组元素
// for (int i = 0; i < arrays.length; i++) {
// System.out.println(arrays[i]);
// }
// // 增强型for循环
// for(int arr : arrays)
// {
// System.out.println(arr);
// }
System.out.println("=====================");
// 计算所有元素和
int sum = 0;
for (int i = 0; i < arrays.length; i++) {
sum += arrays[i];
}
System.out.println("元素和:"+sum);
// 寻找最大元素
int max = arrays[0];
for (int i = 1; i < arrays.length; i++) {
if(arrays[i] > max) max = arrays[i];
}
System.out.println("最大值:"+max);
// printArr(arrays);
printArr(reverse(arrays));
}
// 打印数组元素
public static void printArr(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
}
// 反转数组
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
// 反转的操作
for (int i = 0, j = result.length-1; i < arrays.length; i++,j--) {
result[j] = arrays[i];
}
return result;
}
}
4. 二维数组
代码示例
package com.baidu.www;
public class test {
public static void main(String[] args) {
// 二维数组
int[][] array = {{1,2}, {2,3},{3,4}};
// System.out.println(array[2][0]);
for (int i = 0; i < array.length; i++) {
for (int i1 = 0; i1 < array[i].length; i1++) {
System.out.println(array[i][i1]);
}
}
}
}
5. Arrays类讲解
数组的工具类 java.util.Arrays
![7a9f6a42c0a789c45e6488c1d4c78105]()
代码示例
package com.baidu.www;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 9999, 23, 45, 788};
System.out.println(arr);
// 打印数组元素
System.out.println(Arrays.toString(arr));
// 数组排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// 数组填充
Arrays.fill(arr, 0);
System.out.println(Arrays.toString(arr));
Arrays.fill(arr, 2, 4, 99);
System.out.println(Arrays.toString(arr));
}
}
6. 冒泡排序
代码示例
package com.baidu.www;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] a = {1,7,4,6,9,2,0};
System.out.println(Arrays.toString(sort(a)));;
}
// 冒泡排序
public static int[] sort(int[] array){
// 临时变量
int temp = 0;
// 外层循环
for (int i = 0; i < array.length - 1; i++) {
boolean flag = false; // 通过标识位减少没有意义的比较
// 内层循环
for (int i1 = 0; i1 < array.length - 1 - i; i1++) {
if(array[i1+1] < array[i1]){
temp = array[i1];
array[i1] = array[i1 + 1];
array[i1 + 1] = temp;
flag = true;
}
}
if(flag==false) break;
}
return array;
}
}
7. 稀疏数组
![e6a483023da77c5a524a701df517727e]()
代码示例
package com.baidu.www;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
// 1. 创建一个二维数组,11*11
// 0表示没有棋子
// 1表示黑棋
// 2表示白棋
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
for(int[] arr:array){
for(int a:arr){
System.out.print(a + "\t");
}
System.out.println();
}
// 转化为稀疏数组保存
// 获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int i1 = 0; i1 < 11; i1++) {
if(array[i][i1] != 0) sum++;
}
}
System.out.println("有效值的个数为:" + sum);
// 创建稀疏数组的数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
// 遍历二维数组,将非0值存放到稀疏数组
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int i1 = 0; i1 < array[i].length; i1++) {
if(array[i][i1] != 0){
count++;
array2[count][0] = i;
array2[count][1] = i1;
array2[count][2] = array[i][i1];
}
}
}
// 输出稀疏数组
System.out.println("稀疏数组");
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2]);
}
// 稀疏数组还原
System.out.println("=================================");
System.out.println("稀疏数组还原");
// 读取稀疏数组
int[][] array3 = new int[array2[0][0]][array2[0][1]];
// 还原数组元素
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
// 打印还原的数组
System.out.println();
for(int[] arr:array3){
for(int a:arr){
System.out.print(a + "\t");
}
System.out.println();
}
}
}