欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java数组

程序员文章站 2023-04-06 10:17:43
Java——数组 1.数组概述 数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致。数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型。数组分为:一维数组和二维数组 2.一维数组 1.格式 格式1:数据类型[] 数组名 ......

java——数组

1.数组概述

  数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致。数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型。数组分为:一维数组和二维数组

2.一维数组

  1.格式

    格式1:数据类型[] 数组名;

       格式2:数据类型 数组名[];

    type var [ ] ; 或 type [ ] var ;

    注意:这两种定义做完了,数组中是没有元素值的。所以必须初始化。

  2.初始化概述

    所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

    初始化分类:动态初始化和静态初始化。

  3.初始化方式

    动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

    静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

    1)动态初始化格式

      Java数组 

    2)静态初始化格式

      Java数组 

    3)在内存中的分配

      Java数组 

      一维数组初始化后在内存中的分配图:

        Java数组 

3.二维数组

  1.概述

    其实二维数组其实就是一个元素为一维数组的数组。

  2.格式

    Java数组      Java数组 

  3.举例

      int a[][] = newint [3][];

    a[0] = new int [2];

    a[1] = new int [4];

    a[2] = new int [3];

   图解如下:

      Java数组 

      以二维数组为例,其实二维数组就相当于数组中包含数组,所以在声明的时候要先声明第一维度,如下:

      a[0] = new int [2];    相当于给第一个包含在内的数组声明了两个小格的内存,

      a[1] = new int [4];    相当于给第二个包含在内的数组声明了四个小格的内存,

      a[2] = new int [3];    相当于给第三个包含在内的数组声明了三个小格的内存,

      理解了二维数组的概念应该就能理解多维的概念

 

  4.二维数组的初识化   

      • 静态初始化:     int inta[][] = {{1,2},{3,4},{7,8,9}};
      • 动态初始化:
      • int a[][] = new int [3] [5];
        int b[][] = new int [3][];
        b[0] = new int [2];
        b[1] = new int [3];
        b[2] = new int [5];

  5.二维数组举例  

Java数组

4.数组的拷贝

  使用java.lang.system类的静态方法:

public static void arraycopy(object src,int srcpos,object dest,int destpos,int lenth)
  • 可以同于数组src从第srcpos项元素开始的lenth个元素拷贝到目标数组从destpos项开始的length个位置
  • 如果源数据数目超过目标数组边界会抛出indexoutofbpundsexception异常
  • 需要注意的是,修改拷贝后的数组,源数组的值也会跟着改变,因为copy后的数组和源数组在内存空间指向的是同一地址,可以参考后面的例子来理解这句话

  publicclass test {

public static void main(string[] args){
        //一维数组的拷贝
        string[] s = {"mircosoft","ibm","sun","oracle","apple"};
        string[] sbak = new string[6];
        system.arraycopy(s, 0, sbak, 0, s.length);
    
        for(int i=0;i<sbak.length;i++){
            system.out.print(sbak[i]+" ");
        }
        system.out.println();
        for(int i=0;i<s.length;i++){
            system.out.print(s[i]+" ");
        }
        system.out.println();
        //二维数组的拷贝
        int [][] intarray = {{1,2},{1,2,3},{3,4}};
        int [][] intarraybak = new int[3][];
        system.arraycopy(intarray, 0, intarraybak, 0, intarray.length);
        intarraybak[2][1] = 100;
        for(int i = 0;i<intarray.length;i++) {
            for(int j=0;j<intarray[i].length;j++) {
                system.out.print(intarray[i][j]+"     ");
            }
            system.out.println();
        }
    }
}

  再看一个例子:
  
public class test {
    public static void main(string[] args) {       
        int a[] = {1,2,3,4};
        int b[] = {4,2,3,5,6};
        int c[];
        int c1[];
        //相当于数组扩充,观察c1和c2的输出来参考这个函数的使用方式
        c = arrays.copyof(b, a.length + b.length);
        c1 = arrays.copyof(a, a.length + b.length);
        system.out.println("c = " + arrays.tostring(c));
        system.out.println("c1 = " + arrays.tostring(c1));
        //数组拷贝
        system.arraycopy(b, 0, c, a.length, b.length);
        system.out.println("c = " + arrays.tostring(c));       
        system.out.println("a = " + arrays.tostring(a));
        system.out.println("b = "