数组概述
相同类型数据的有序集合
数组中每一个数据称为数组元素,每一个数组元素可以用一个下标来访问,其中第一个元素下标为0
数组声明创建
int[] nums;//1.定义数组 建议使用
int nums2[];//知道就行
public class ArrayDemo01 {
//变量的类型 变量的名字 = 变量的值
public static void main(String[] args) {
int[] nums;//1.定义数组 建议使用
int nums2[];//知道就行
nums = new int[2];//2.创建一个数组
nums[0] = 1;
nums[1] = 2;
int sun = 0;
//nums.length表示获取数组的长度
for (int i = 0;i<nums.length;i++){
sun = sun +nums[i];
}
System.out.println(sun);
}
}
java.lang.ArrayIndexOutOfBoundsException 表示数组下标越界
public class ArrayDemo02 {
public static void main(String[] args) {
//静态初始化:创建 + 赋值
int[] a = {1,2,3,4};
System.out.println(a[3]);
//动态初始化:包含默认初始化 如果不赋值,会默认为int类型的0 就是b[1] = 0;
int[] b = new int[3];
b[0] = 10;//给数组赋值
System.out.println(b[0]);
}
}
数组使用
//反转数组
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;
}
public class ArrayDemo04 {
public static void main(String[] args) {
int arrays[] = {1,54,5,4,7};
for (int array : arrays ){
System.out.println(array);//此命令可以打印出数组元素,但是没有下标
}
printArray(arrays);
}
//打印数组元素
public static void printArray(int arrays[]){
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
}
}
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个一维数组
二维数组
int a[][] = new int[2][5];
可以看成一个两行五列的数组
public class ArrayDemo05 {
public static void main(String[] args) {
//相当于一个四行两列的数组
/*
1.2 array[0]
2.3 array[1]
3.4 array[2]
4.5 array[3]
*/
int array[][]={{1,2},{2,3},{3,4},{4,5}};
System.out.println(array[0][0]);//输出的是{1,2}里面的1
for (int i = 0; i < array.length; i++) { //array.length表示的是整个的长度 4
for (int j = 0; j < array[i].length; j++) {
}//array[i].length表示的是二维数组的长度 2
System.out.println(array[i][j]);
}
}
}
}
Arrays类
数组的工具类java.util.Arrays
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(是不用,不是不能)
具有以下常用功能
给数组赋值:通过fill方法
对数组排序:通过sort方法,按升序
比较数组:通过equals方法比较数组中元素值是否相等
查找数组元素:通过binarySearch 方法能堆排序好的数组进行二次查找发操作
import java.util.Arrays;
public class ArrayDemo06 {
public static void main(String[] args) {
int[] a = {15,45,4,54,5,12,1,54,5,4};
Arrays.sort(a);//将数组进行排序,升序,从小到大排序
System.out.println(Arrays.toString(a));//打印数组元素Arrays.toString()
}
}
两个数交换 4 5
int temp = 0;//临时变量
if(a[j+1]>a[j]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
稀疏数组
当一个数组中大部分元素为0时,或者为同一值时,可以用稀疏数组来保存该数组
稀疏数组的处理方式是
记录数组一共有几行几列,有多少个不同值
把具体有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
| 0 | 3 | 0 | 0 |
|---|---|---|---|
| 0 | 0 | 3 | 0 |
| 1 | 0 | 0 | 6 |
| 0 | 2 | 0 | 0 |
表示为
4(行) 4(列) 5(有5个值)
a[0] 1 2 3
a[1] 2 3 3
a[2] 3 1 1
a[3] 3 4 6
a[4] 4 2 2
public class ArrayDemo07 {
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;
//输出原始数组
System.out.println("输出原始数组");
for (int[] ints : array){
for (int anInt : ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
//转化为稀疏数组保存
//获取有效的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数:"+sum);
//创建一个稀疏数组的数组
int[][] array1 = new int[sum+1][3];
array1[0][0] = 11;
array1[0][1] = 11;
array1[0][2] = sum;
//遍历二维数组,将非零的值存放在稀疏数组中
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j]!=0){
count++;
array1[count][0] = i;
array1[count][1] = j;
array1[count][2] = array[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i][0]+"\t"
+array1[i][1]+"\t"
+array1[i][2]+"\t");
}
System.out.println("还原");
//读取稀疏数组
int[][] array2 = new int[array1[0][0]][array1[0][1]];
//给其他的元素还原它的值
for (int i = 1; i < array1.length; i++) {
array2[array1[i][0]][array1[i][1]] = array1[i][2];
}
//打印
System.out.println("输出还原数组");
for (int[] ints : array2) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
}
}