Java –如何声明和初始化数组

本文详细介绍Java中数组的声明、初始化、操作、复制、排序及常见问题解决,包括一维和多维数组处理,以及异常处理。
数组

很少有Java示例可以在Java中声明,初始化和操作Array

1.声明数组

1.1对于原始类型。

ArrayExample1.java
package com.mkyong;

import java.util.Arrays;

public class ArrayExample1 {

    public static void main(String[] args) {

        //declares an array of integers
        int[] num1 = new int[5];
        int[] num2 = {1, 2, 3, 4, 5};
        int[] num3 = new int[]{1, 2, 3, 4, 5};

		// index starts with 0
        num1[0] = 1;
        num1[1] = 2;
        num1[2] = 3;
        num1[3] = 4;
        num1[4] = 5;

		// print array
        System.out.println(Arrays.toString(num1));
        System.out.println(Arrays.toString(num2));
        System.out.println(Arrays.toString(num3));

    }

}

输出量

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

1.2对于类或对象,例如String.class ,是相同的。

ArrayExample1.java
package com.mkyong;

import java.util.Arrays;

public class ArrayExample1 {

    public static void main(String[] args) {

        String[] str1 = new String[5];
        String[] str2 = {"a", "b", "c", "d", "e"};
        String[] str3 = new String[]{"a", "b", "c", "d", "e"};

        str1[0] = "a";
        str1[1] = "b";
        str1[2] = "c";
        str1[3] = "d";
        str1[4] = "e";

        System.out.println(Arrays.toString(str1));
        System.out.println(Arrays.toString(str2));
        System.out.println(Arrays.toString(str3));

    }

}

输出量

[a, b, c, d, e]
[a, b, c, d, e]
[a, b, c, d, e]

2.返回数组

2.1一种返回数组的方法。

ArrayExample2.java
package com.mkyong;

import java.util.Arrays;

public class ArrayExample2 {

    public static void main(String[] args) {

        int[] resultNum = getArrayNumber();
        String[] resultStr = getArrayString();

        System.out.println(Arrays.toString(resultNum));
        System.out.println(Arrays.toString(resultStr));

    }

    public static int[] getArrayNumber() {
        return new int[]{1, 2, 3, 4, 5};
    }

    public static String[] getArrayString() {
        return new String[]{"a", "b", "c", "d", "e"};
    }

}

输出量

[1, 2, 3, 4, 5]
[a, b, c, d, e]

3.访问阵列

3.1数组索引从0开始

ArrayExample3.java
package com.mkyong;

public class ArrayExample3 {

    public static void main(String[] args) {

        // array, empty
        int[] num;

        // array of 5 elements
        num = new int[5];

        num[0] = 1;
        num[1] = 2;
        num[2] = 3;
        num[3] = 4;
        num[4] = 5;

        System.out.println("num[0] : " + num[0]);
        System.out.println("num[1] : " + num[1]);
        System.out.println("num[2] : " + num[2]);
        System.out.println("num[3] : " + num[3]);
        System.out.println("num[4] : " + num[4]);

    }

}

输出量

num[0] : 1
num[1] : 2
num[2] : 3
num[3] : 4
num[4] : 5

4. ArrayIndexOutOfBoundsException

4.1如果访问的索引大于数组的大小。 同样,索引从0开始。

ArrayExample4.java
package com.mkyong;

public class ArrayExample4 {

    public static void main(String[] args) {

        // array, empty
        int[] num;

        // array of 5
        num = new int[5];

        num[0] = 1;
        num[1] = 2;
        num[2] = 3;
        num[3] = 4;
        num[4] = 5;
        //num[5] = 6; //ArrayIndexOutOfBoundsException: 5

        System.out.println("num[0] : " + num[0]);
        System.out.println("num[1] : " + num[1]);
        System.out.println("num[2] : " + num[2]);
        System.out.println("num[3] : " + num[3]);
        System.out.println("num[4] : " + num[4]);
        System.out.println("num[5] : " + num[5]); //ArrayIndexOutOfBoundsException: 5

    }

}

输出量

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at com.mkyong.ArrayExample.main(ArrayExample.java:18)

5.多维数组

ArrayExample5.java
package com.mkyong;

public class ArrayExample5 {

    public static void main(String[] args) {

        int[][] num2d = new int[2][5];

        num2d[0][0] = 1;
        num2d[0][1] = 2;
        num2d[0][2] = 3;
        num2d[0][3] = 4;
        num2d[0][4] = 5;

        num2d[1][0] = 10;
        num2d[1][1] = 20;
        num2d[1][2] = 30;
        num2d[1][3] = 40;
        num2d[1][4] = 50;

        //or like this :
        int[][] num2dInit = {
                {1, 2, 3, 4, 5},
                {10, 20, 30, 40, 50}
        };

        // Accessing 2d array with index print
        int index1d, index2d = 0;

        for (int[] num1d : num2d) {
            index1d = 0;
            for (int num : num1d) {
                System.out.println("[" + index2d + "][" + index1d + "] = " + num);
                index1d++;
            }
            index2d++;
        }

        /* Simple print
        for (int[] num1d : num2d) {
            for (int num : num1d) {
                System.out.println(num);
            }
        }*/


    }

}

输出量

[0][0] = 1
[0][1] = 2
[0][2] = 3
[0][3] = 4
[0][4] = 5
[1][0] = 10
[1][1] = 20
[1][2] = 30
[1][3] = 40
[1][4] = 50

6.复制阵列

我们可以使用System.arraycopy将数据从Array复制到另一个。

arraycopy(Object src,  int  srcPos, 
	Object dest, int destPos,
	int length);
ArrayExample6.java
package com.mkyong;

import java.util.Arrays;

public class ArrayExample6 {

    public static void main(String[] args) {

        int[] arrayFrom = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        int[] arrayTo = new int[5];
        int[] arrayTo2 = new int[10];

        System.out.println(Arrays.toString(arrayFrom));

        //[3, 4, 5, 6, 7]
        System.arraycopy(arrayFrom, 2, arrayTo, 0, 5);

        System.out.println(Arrays.toString(arrayTo));

        //[0, 0, 0, 0, 0, 1, 2, 3, 4, 5]
        System.arraycopy(arrayFrom, 0, arrayTo2, 5, 5);

        System.out.println(Arrays.toString(arrayTo2));
    }

}

输出量

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 4, 5, 6, 7]
[0, 0, 0, 0, 0, 1, 2, 3, 4, 5]

阅读Java文档System.arraycopy

7.排序数组

我们可以使用Arrays.sort对数组进行排序。

ArrayExample7.java
package com.mkyong;

import java.util.Arrays;
import java.util.Collections;

public class ArrayExample7 {

    public static void main(String[] args) {

        int[] num = {10, 5, 4, 3, 6, 9, 7, 8, 2, 1};

        System.out.println(Arrays.toString(num));

        // ascending order
        Arrays.sort(num);

        System.out.println(Arrays.toString(num));

        // descending order, int[] cant, need boxed to Integer[] first
        Integer[] numObjects = Arrays.stream(num).boxed().toArray(Integer[]::new);

        Arrays.sort(numObjects, Collections.reverseOrder());

        System.out.println(Arrays.toString(numObjects));

    }

}

输出量

[10, 5, 4, 3, 6, 9, 7, 8, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

8.连接数组

我们可以使用Stream来连接多个数组。

ArrayExample8.java
package com.mkyong;

import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class ArrayExample8 {

    public static void main(String[] args) {

        String[] s1 = new String[]{"a", "b", "c"};
        String[] s2 = new String[]{"d", "e", "f"};

        String[] result = Stream.of(s1, s2).flatMap(Stream::of).toArray(String[]::new);
        System.out.println(Arrays.toString(result));

        int[] num1 = new int[]{1, 2, 3};
        int[] num2 = new int[]{4, 5, 6};

        int[] result2 = IntStream.concat(Arrays.stream(num1), Arrays.stream(num2)).toArray();
        System.out.println(Arrays.toString(result2));

    }

}

输出量

[a, b, c, d, e, f]
[1, 2, 3, 4, 5, 6]

9.常见问题

9.1 将数组转换为列表

9.2 将数组转换为流

参考文献

翻译自: https://mkyong.com/java/java-how-to-declare-and-initialize-an-array/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值