Java数组详解

数组详解

1、数组概述

  数组是相同类型数据的有序集合

  每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们

 

2、数组声明和创建

  ①数组声明形式

dataType[] arrayRefVar;         //首选的方法
dataType arrayRefVar[];

  ②数组的创建

dataType[] arrayRefVar=new dataType[arraySize];

  ③数组元素是通过索引访问的,数组索引从0开始

 

3、内存分析及三种初始化方式

  ①Java内存

           

  ②定义数组时内存分配情况

     1.声明数组—int[] array=null;

      在栈中存放变量,如图所示

            

      2.创建数组—array=new int[5];

       在堆中开辟空间,如图所示

          

        3.给数组元素赋值

         array[0]=0;array[1]=1;array[2]=2;未赋值元素是默认值0

          

  ③三种初始化方式

    1.静态初始化

int[] array={1,2,3};
Man[] mans={new Man(1,1),new Man(2,2)};  //Man是类

    2.动态初始化

int[] array=new int[2];
array[0]=1;
array[1]=2;

    3.默认初始化

      数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化

 

4、数组基本特点

  ①数组长度是确定的

  ②元素必须是相同类型

  ③数组中的元素可以是任何数据类型,包括基本类型和引用类型

  ④数组对象本身是保存在堆中的,数组也是对象

 

5、数组边界问题

  ①下标合法区间—[0,length-1]

  ②数组越界会报ArrayIndexOutOfBoundsException异常

 

6、数组的使用

  ①For—Each循环

1 public class Demo1 {
2     public static void main(String[] args) {
3         int[] arrays={1,2,3,4,5,6};
4         for(int array:arrays){
5             System.out.println(array);
6         }
7     }
8 }

  ②数组作方法入参

public static void printArray(int[] arrays){
        for(int i=0;i<arrays.length;i++){
            System.out.print(arrays[i]+" ");
        }
    }

  ③数组作为返回值

 public static int[] reverse(int[] arrays){
        int result[]=new int[arrays.length];
        int i=0;
        for(int j=arrays.length-1;j>=0;j--){
            result[i]=arrays[j];
            i++;
        }
        return result;
    }

 

7、多维数组

  多维数组可以看成是数组的数组

  例如:int[] [] nums=new int[3] [2];

  

 

8、Arrays类

  ①数组的工具类java.util.Arrays,Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用

int a[]={1,2,3};
System.out.print(Arrays.toString(a));//输出数组元素

 

方法名作用
toString(a) 输出数组元素
sort(a) 按升序对数组元素进行排序
equals(a1,a2) 比较数组元素是否相等
binarySearch(a,3) 查找指定元素索引值
fill(a,2) 给数组赋值

 

9、稀疏数组

  ①当一个数组中大部分元素为0,或者同一值的数组时,可以使用稀疏数组来保存该数组

  ②稀疏数组的处理方式是:

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

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

            

 1 public class Sparse {
 2     public static void main(String[] args) {
 3         //定义一个数组
 4         int array1[][]=new int[6][6];
 5         array1[0][2]=3;
 6         array1[3][3]=6;
 7         array1[5][5]=2;
 8         printArray(array1);
 9 10         System.out.println("===========================");
11         //遍历数组获取非零个数
12         int sum=0;
13         for(int i=0;i<array1.length;i++){
14             for(int j=0;j<array1[i].length;j++){
15                 if(array1[i][j]!=0){
16                     sum++;
17                 }
18             }
19         }
20 21         //定义一个稀疏数组
22         int array2[][]=new int[sum+1][3];
23         array2[0][0]=6;
24         array2[0][1]=6;
25         array2[0][2]=sum;
26         int count=1;
27         for(int i=0;i<array1.length;i++){
28             for(int j=0;j<array1[i].length;j++){
29                 if(array1[i][j]!=0){
30                     array2[count][0]=i;            //保存行
31                     array2[count][1]=j;            //保存列
32                     array2[count][2]=array1[i][j]; //保存值
33                     count++;
34                 }
35             }
36         }
37         System.out.println("稀疏数组内容");
38         printArray(array2);
39 40         System.out.println("===========================");
41 42         //根据稀疏数组还原数组
43         int array3[][]=new int[array2[0][0]][array2[0][1]];
44         for(int i=1;i<array2.length;i++){
45                 array3[array2[i][0]][array2[i][1]]=array2[i][2];
46         }
47         printArray(array3);
48 49     }
50     public static void printArray(int[][] array){
51         for(int i=0;i<array.length;i++){
52             for(int j=0;j<array[i].length;j++){
53                 System.out.print(array[i][j]+" ");
54             }
55             System.out.print("\n");
56         }
57     }
58 }

 

 

posted @ 2021-02-08 21:19  sumAll  阅读(970)  评论(0编辑  收藏  举报