很少有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 将数组转换为流
参考文献
- Java文档– ArrayIndexOutOfBoundsException
- 数组教程
- 系统数组复制
- 如何在Java中复制数组
- Java –如何打印数组
- 如何在Java中对数组进行排序
- Java –如何将数组转换为流
翻译自: https://mkyong.com/java/java-how-to-declare-and-initialize-an-array/
本文详细介绍Java中数组的声明、初始化、操作、复制、排序及常见问题解决,包括一维和多维数组处理,以及异常处理。


被折叠的 条评论
为什么被折叠?



