Java数组

数组概述

相同类型数据的有序集合

数组中每一个数据称为数组元素,每一个数组元素可以用一个下标来访问,其中第一个元素下标为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时,或者为同一值时,可以用稀疏数组来保存该数组

稀疏数组的处理方式是

记录数组一共有几行几列,有多少个不同值

把具体有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

0300
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();
}
}
}