Java 数组
1、简介
把数组当作若干个盒子,里面存放东西
变量:一个盒子,点
一维:一行盒子,线
二维:在一维的每个盒子里面,再放一行盒子,面
2、数组创建
dataType[] arrayRefVar; //首选
dataType[] arrayRefVar = new dataType[arraySize];
//例
int[] a = {12,23,2,454,234,23441,4,556,5,7,5,4,5,765,2,4,34,78,4};
3、内存分析
堆:存放new的对象和数组,可以被所有线程共享
栈:存放基本变量类型,引用对象的变量
方法区:可以被所有线程共享,包含了class,static变量
4、多维数组
int[][] a = new int[4][7]
5、Arrays类
常用方法
- toString 将数组转换成String类型输出
- fill 填充
- sort 排序
6、应用
6.1、冒泡排序
public static int[] sort(int[] arr){
//交换变量
int temp = 0;
//优化,过滤第一次比较就已经排好序的,即没有交换的
boolean flag = false;
for (int i = 0;i < arr.length;i++){
for (int j = 0;j < arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = true;
}
}
if(flag==false){
break;
}
}
return arr;
}
6.2、稀疏数组
例如:五子棋盘,空的时候有很多0,避免浪费,采用一个数组记录
稀疏数组:首行记录,棋盘行,列,有效棋子数;其余的全部记录,坐标和值
public static void main(String[] args) {
// 创建棋盘
int[][] arr1 = new int[11][11];
arr1[1][2] = 1;
arr1[2][3] = 2;
System.out.println("--------棋盘-------");
for (int i = 0;i < arr1.length;i++){
System.out.println(Arrays.toString(arr1[i]));
}
System.out.println("===============================");
//记录有效棋子数
int sum = 0;
for (int i = 0; i < arr1.length;i++){
for (int j = 0 ;j < arr1[i].length;j++){
if(arr1[i][j] != 0){
sum++;
}
}
}
System.out.println("棋子数:"+sum);
System.out.println("===============================");
//创建稀疏数组
int[][] arr3 = new int[sum+1][3];
arr3[0][0] = 11;
arr3[0][1] = 11;
arr3[0][2] = sum;
// 添加棋子坐标
int count = 0;
for (int i = 0; i < arr1.length;i++){
for (int j = 0 ;j < arr1[i].length;j++){
if(arr1[i][j] != 0){
count++;
arr3[count][0] = i;
arr3[count][1] = j;
arr3[count][2] = arr1[i][j];
}
}
}
System.out.println("------稀疏数组------");
for (int i = 0;i < arr3.length;i++){
System.out.println(Arrays.toString(arr3[i]));
}
int[][] arr4 = new int[arr3[0][0]][arr3[0][1]];
for (int i = 1;i < arr3.length;i++){
arr4[arr3[i][0]][arr3[i][1]] = arr3[i][2];
}
System.out.println("------还原棋盘------");
for (int i = 0;i < arr4.length;i++){
System.out.println(Arrays.toString(arr4[i]));
}
}