Java数组

1 什么是Java数组

通常,数组是具有连续存储位置的相似类型元素的集合。

Java数组是一个对象,其中包含相似数据类型的元素。此外,数组的元素存储在连续的存储位置中。Java数组是一个数据结构,我们在其中存储相似的元素。但注意的是,我们只能在Java数组中存储一组固定的元素。

Java中的数组是基于索引的,数组的第一个元素存储在第0个索引,第二个元素存储在第一个索引,依此类推。

与C/C ++不同,我们可以使用length属性来获取数组的长度。而在C/C ++中,是使用sizeof运算符。

在Java中,数组是动态生成的类的对象。Java数组继承了Object类,并实现了Serializable以及Cloneable接口。我们可以将原始值或对象存储在Java数组中。像C/C ++一样,我们也可以在Java中创建一维或二维数组。

而且,Java提供了匿名数组的功能,而在C/C ++中是没有匿名数组的。

2 Java数组的优点

  • 代码优化:Java数组使代码得以优化,我们可以高效地检索或排序数据。
  • 随机访问:我们可以获得位于索引位置的任何数据。

3 Java数组的缺点

  • 大小限制:我们在数组中存储元素的数量是固定的。意味着Java数组不会在运行时增加其容量(不会自动扩容)。为了解决这个问题,在Java中使用了Collection集合,Collection可以自动扩容。

4 Java数组的类型

有两种类型的数组:

  • 一维数组
  • 二维数组

5 Java一维数组

用Java声明数组的语法:

dataType[] arr; (或者)  
dataType []arr; (或者)  
dataType arr[];  

用Java实例化数组

arrayRefVar=new datatype[size]; 

6 Java一维数组的例子

让我们看一下Java数组的简单例子,我们将声明,实例化,初始化和遍历数组。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//声明、实例化,变量Java数组的例子
class Test{
    public static void main(String args[]){
        int a[]=new int[5];//声明数组
        a[0]=10;//实例化
        a[1]=20;
        a[2]=70;
        a[3]=40;
        a[4]=50;
        //遍历数组
        for(int i=0;i<a.length;i++)//length属性可以获取数组的长度
            System.out.println(a[i]);
    }
}

输出结果为:

10
20
70
40
50

7 Java数组的声明、实例化和初始化

我们可以通过以下方式一起声明,实例化和初始化Java数组:

int a[]={33,3,4,5};//声明、实例化、初始化

让我们看一下打印此数组的简单例子。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//声明,实例化Java数组的例子   
class Testarray1{
    public static void main(String args[]){
        int a[]={33,3,4,5};//声明、实例化、初始化数组
        //打印输出数组元素
        for(int i=0;i<a.length;i++)
            System.out.println(a[i]);
    }
}

输出结果为:

33
3
4
5

8 for-each遍历Java数组

我们还可以使用for-each循环打印Java数组。Java的for-each循环可以逐一打印数组元素。它在变量中包含一个数组元素,然后执行循环的主体。

for-each循环的语法如下:

for(data_type variable:array){  
  //循环体  
}  

让我们看一下使用for-each循环打印Java数组元素的例子:

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//使用for-each循环遍历Java数组的例子  
class Testarray1{
    public static void main(String args[]){
        int arr[]={33,3,4,5};
        //使用for-each循环 
        for(int i:arr)
            System.out.println(i);
    }
}

输出结果为:

33
3
4
5

9 把Java数组作为方法参数

我们可以将Java数组作为方法的参数,以便我们可以在重用数组相同的逻辑。

让我们看一个简单的例子:

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//把Java数组作为方法参数的例子
class Testarray2{
    //创建一个接收Java数组参数的方法 
    static void min(int arr[]){
        int min=arr[0];
        for(int i=1;i<arr.length;i++)
            if(min>arr[i])
                min=arr[i];

        System.out.println(min);
    }

    public static void main(String args[]){
        int a[]={33,3,4,5};//定义和实例化数组
        min(a);//传递数组参数
    }
}

输出结果为:

3

10 Java匿名数组

Java支持匿名数组的功能,因此我们在将传递数组参数的时候,无需提前声明该数组。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//匿名数组的例子
public class Test{
    //创建一个接收数组参数的方法
    static void printArray(int arr[]){
        for(int i=0;i<arr.length;i++)
            System.out.println(arr[i]);
    }

    public static void main(String args[]){
        printArray(new int[]{10,22,44,66});//传递匿名数组
    }
}

输出结果为:

10
22
44
66

11 Java数组作为方法返回值

我们还可以在Java的方法返回值中返回一个Java数组。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//把Java数组作为方法返回值的例子 
class Test{
    //创建一个带有数组返回值的方法
    static int[] get(){
        return new int[]{10,30,50,90,60};
    }

    public static void main(String args[]){
        //调用返回数组的方法 
        int arr[]=get();
        //打印输出数组元素 
        for(int i=0;i<arr.length;i++)
            System.out.println(arr[i]);
    }
}  

输出结果为:

10
30
50
90
60

12 ArrayIndexOutOfBoundsException下标越界

如果遍历数组时数组的长度为负数(等于数组大小或大于数组大小),则Java虚拟机(JVM)会抛出ArrayIndexOutOfBoundsException异常。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//引发ArrayIndexOutOfBounds异常的例子
public class Test{
    public static void main(String args[]){
        int arr[]={50,60,70,80};
        for(int i=0;i<=arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

输出结果为:

50
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
60
	at com.yiidian.Test.main(Test.java:11)
70
80

13 Java二维数组

Java支持定义二维数组,数据以基于行和列的索引(也称为矩阵形式)存储。

Java声明二维数组的语法:

dataType[][] arrayRefVar; (或者)  
dataType [][]arrayRefVar; (或者)  
dataType arrayRefVar[][]; (或者)  
dataType []arrayRefVar[];   

实例化二维数组的例子:

int[][] arr=new int[3][3];//有3行3列

初始化二维数组的例子:

arr[0][0]=1;  
arr[0][1]=2;  
arr[0][2]=3;  
arr[1][0]=4;  
arr[1][1]=5;  
arr[1][2]=6;  
arr[2][0]=7;  
arr[2][1]=8;  
arr[2][2]=9; 

14 Java二维数组的例子

让我们看一个简单的例子来声明,实例化,初始化和打印二维数组。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//Java二维数组的例子说明
class Test{
    public static void main(String args[]){
        //定义和初始化二维数组
        int arr[][]={{1,2,3},{2,4,5},{4,4,5}};
        //打印二维数组
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }
}

输出结果为:

1 2 3 
2 4 5 
4 4 5

15 Java锯齿数组

如果我们在二维数组中创建奇数列,则称为锯齿数组。换句话说,它是一个包含不同列数数组的数组。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//锯齿数组的例子
class Test{
    public static void main(String[] args){
        //定义奇数列的锯齿数组
        int arr[][] = new int[3][];
        arr[0] = new int[3];
        arr[1] = new int[4];
        arr[2] = new int[2];
        //初始化锯齿数组
        int count = 0;
        for (int i=0; i<arr.length; i++)
            for(int j=0; j<arr[i].length; j++)
                arr[i][j] = count++;

        //打印锯齿数组元素数据
        for (int i=0; i<arr.length; i++){
            for (int j=0; j<arr[i].length; j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();//换行
        }
    }
}

输出结果为:

0 1 2 
3 4 5 6 
7 8

16 获取Java数组的类名

在Java中,数组是一个对象。数组对象,将会创建一个代理类,该代理类的名称可以通过对象上的getClass()、getName() 方法获得。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//获取数组名称的例子说明
class Test{
    public static void main(String args[]){
        //定义和初始化数组
        int arr[]={4,4,5};
        //获取数组的对象名称
        Class c=arr.getClass();
        String name=c.getName();
        //打印输出数组的对象名称
        System.out.println(name);
    }
}

输出结果为:

[I

17 拷贝Java数组

我们可以通过System类的arraycopy() 方法将一个数组复制到另一个数组。

arraycopy方法的语法

public static void arraycopy(  
   Object src, int srcPos,Object dest, int destPos, int length  
)  

18 拷贝Java数组的例子

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//从一个数组拷贝数据到另一个数组的例子
class TestArrayCopyDemo {
    public static void main(String[] args) {
        //定义一个数组
        char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' };
        //定义另一个数组 
        char[] copyTo = new char[7];
        //从第一个数组拷贝到第二个数组
        System.arraycopy(copyFrom, 2, copyTo, 0, 7);
        //打印数组元素
        System.out.println(String.valueOf(copyTo));
    }
}

输出结果为:

caffein

19 克隆Java数组

由于Java数组实现了Cloneable接口,因此我们可以创建Java数组的克隆。如果我们创建一维数组的克隆,它将创建Java数组的深层副本。这意味着它将复制实际值。但是,如果我们创建二维数组的克隆,它将创建Java数组的浅表副本,这意味着它将复制引用。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//克隆Java数组的例子
class Test{
    public static void main(String args[]){
        int arr[]={33,3,4,5};
        System.out.println("打印原始数组:");
        for(int i:arr)
            System.out.println(i);

        System.out.println("打印克隆后的数组:");
        int carr[]=arr.clone();
        for(int i:carr)
            System.out.println(i);

        System.out.println("两个数组相等么?");
        System.out.println(arr==carr);

    }
}

输出结果为:

打印原始数组:
33
3
4
5
打印克隆后的数组:
33
3
4
5
两个数组相同么?
false

20 Java二维数组相加

让我们看一个简单的例子,将两个二维数组相加。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//将2个二维数组相加的例子
class Test{
    public static void main(String args[]){
        //创建2个二维数组
        int a[][]={{1,3,4},{3,4,5}};
        int b[][]={{1,3,4},{3,4,5}};

        //创建另一个二维数组来存储相加的结果
        int c[][]=new int[2][3];

        //把二维数组相加,并存储到新数组中
        for(int i=0;i<2;i++){
            for(int j=0;j<3;j++){
                c[i][j]=a[i][j]+b[i][j];
                System.out.print(c[i][j]+" ");
            }
            System.out.println();//换行
        }

    }
}

输出结果为:

2 6 8 
6 8 10 

21 Java二维数组相乘

Java二维数组相乘的时候,第一矩阵的单行元素乘以第二矩阵的所有列,大家可以通过下图先理解这个过程:

让我们看一个简单的例子,将两个3行3列的二维数组相乘。

package com.yiidian;

/**
 * 一点教程网:http://www.yiidian.com
 */
//2个二维数组相乘的例子 
public class Test{
    public static void main(String args[]){
        //创建2个二维数组   
        int a[][]={{1,1,1},{2,2,2},{3,3,3}};
        int b[][]={{1,1,1},{2,2,2},{3,3,3}};

        //创建第3个数组来存储2个二维数组相乘的结果   
        int c[][]=new int[3][3];  //3行3列

        //相乘    
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                c[i][j]=0;
                for(int k=0;k<3;k++)
                {
                    c[i][j]+=a[i][k]*b[k][j];
                }//结束内循环  
                System.out.print(c[i][j]+" ");  //打印数组元素  
            }//结束外循环  
            System.out.println();//换行
        }
    }
}  

输出结果为:

6 6 6 
12 12 12 
18 18 18 

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码