Java数组
Java Array是一个容器,可以容纳固定数量的相同类型的值。
这些值可以是原始类型(例如int,short,byte),也可以是对象(例如String,Integer等)。
Java数组
尽管数组可以保存基本类型和对象,但是即使数组本身声明为保存基本类型数据,数组本身也是java堆中的对象。
我们需要在声明数组时指定值的类型。
初始化时需要提供数组大小。
Java Arrays是实用程序类,提供了许多有用的方法来处理数组。
我们可以使用整数索引访问数组元素。
我们可以使用java for循环或者java forEach循环遍历数组元素。
数组可以是一维也可以是多维。
当我们尝试通过指定大于数组大小的索引值来访问数组元素时,将引发" ArrayIndexOutOfBoundsException"异常。
列表实现(例如ArrayList)由数组支持。
几乎没有实用的方法可以将列表转换为数组,反之亦然。有一些实用方法可以搜索数组中的元素或者对数组进行排序。
我们将在本教程后面的部分中通过示例程序研究这些内容。
让我们看一下有关程序数组的一些重要信息。
Java中的数组声明
可以通过声明数组将保存的数据类型(原始或者对象),方括号和变量名来声明数组。
数组可以是一维的,也可以是多维的。
多维数组实际上是数组的数组。
- 声明原始类型的数据数组(一维):
- 声明对象类型的数组(一维):
- 声明多维数组:
声明数组时,建议在声明的类型之后紧跟方括号。
Java初始化数组
我们可以使用" new"关键字或者使用快捷方式语法来初始化数组,后者可以同时创建和初始化数组。
使用new关键字创建数组意味着我们要在java堆中创建一个数组对象,而要创建一个对象,java需要知道要在堆上为该对象分配多少空间。
因此,我们需要在初始化时指定数组的大小。
初始化一维数组:
初始化多维数组:
使用快捷方式语法初始化数组:
如果您在上面注意到,则二维数组inArr2不是对称矩阵。
这是因为Java中的多维数组实际上是数组的数组。
有关完整说明,请参见Java中的二维数组。无效的数组初始化方法:以下是一些无效的数组初始化方法。
不建议使用初始化数组的方法:这是Java中初始化数组的其他一些变体,但是强烈建议不要使用它们,以免造成混淆。
访问数组元素
数组元素可以通过其索引访问,并且始终以0(零)开头。
数组对象具有称为length的公共变量,该变量给出数组中元素的数量。
我们可以使用
for
或者foreach
循环来处理或者遍历数组元素。
让我们看一下下面的示例程序,该程序用于访问Java中的数组元素。
int[] integers; //Recommended way of declaring an array int integers[]; //Legal but not recommended
现在来看一个使用嵌套的for循环打印二维数组的示例。
String[] strings; //Recommended String strings[]; //not Recommended
什么是ArrayIndexOutOfBoundsException?
有时我们尝试访问数组大小之外的元素;例如,如果我们有一个大小为10的数组,并且如果我们尝试访问第11个元素,则编译器将抛出" ArrayIndexOutOfBoundsException"。
让我们看下面的示例程序。
int[][] integers; //Two dimensional array String[][][] strings; //Three dimensional array
上面程序的输出是:
int[] integers; //declaration integers = new int[5]; //Initializing an array of primitive type with size 5 int[] integers = new int[5]; //declaration and initialization in one line String[] strings; //declaration strings = new String[5]; //initializing an array of type String object with size 5 String[] strings = new String[5]; //declaration and initialization in one line
将数组转换为列表,反之亦然
int[][] intArr = new int[4][5]; //multidimensional array initialization with only leftmost dimension int[][] intArr = new int[2][]; intArr [0] = new int[2]; intArr [1] = new int[3]; //complete initialization is required before we use the array
上面程序的输出是:
int[] intArr = {1,2,3}; String[] strings = {"one", "two", "three"}; int[][] intArr2 = {{1, 2}, {1, 2, 3}};
Java排序数组
可以使用java.util.Arrays排序方法对数组进行排序,该方法将给定的数组按升序排序。
下面是一个简单的数组排序程序。
int[] a = new int[]; //invalid because size is not provided int[][] aa = new int[][5]; //invalid because leftmost dimension value is not provided
上面程序的输出是:
int[] integers[] = new int[4][5]; int integers[][] = new int[5][];
在Java数组中搜索元素
java.util.Arrays提供了binarySearch方法,该方法使用二进制搜索算法从给定的数组中搜索指定的值。
下面是一个使用二进制搜索来搜索数组中元素的简单程序。
在进行此调用之前,必须对数组进行排序。
如果未排序,则结果不确定。
如果数组包含具有指定值的多个元素,则不能保证将找到哪一个。
package com.theitroad.examples; public class JavaArrayExample { public static void main(String[] args) { //initializing an array int[] integers = {1, 2, 3, 4, 5}; String[] strings = {"one", "two", "three", "four", "five"}; //using for loop to access elements System.out.println("Printing integer array using for loop :"); for (int i = 0; i<integers.length; i++) { System.out.println(integers[i]); } System.out.println("Printing string array using for loop :"); for (int i = 0; i<strings.length; i++) { System.out.println(strings[i]); } //using foreach loop for traversing through array System.out.println("Printing integer array using foreach loop :"); for (int i : integers) { System.out.println(i); } System.out.println("Printing string array using foreach loop :"); for (String s : strings) { System.out.println(s); } } }
上面程序的输出是:
package com.theitroad.examples; public class TwoDimensionalArrayExample { public static void main(String[] args) { //initializing an array int[][] integers = { { 1, 2, 3 }, { 4, 5, 6 } }; for (int i = 0; i < integers.length; i++) { for (int j = 0; j < integers[i].length; j++) { System.out.print(integers[i][j]); System.out.print(" "); } System.out.println(); } } }
Java复制数组
Object类提供了" clone()"方法,并且由于java中的数组也是Object,因此可以使用此方法来实现完整的数组复制。
如果要部分复制数组,则此方法不适合您。
下面是一个用于在Java中复制数组的简单程序。
package com.theitroad.examples; public class ArrayIndexOutOfBoundExample { public static void main(String[] args) { //declaring and initializing an array int[] a = new int[2]; a[0] = 1; a[1] = 2; System.out.println(a[2]); } }
还有许多其他方法可以在Java中复制数组。
请参考Java复制数组以了解其他方法。
向数组添加元素
没有快捷方式可以在Java中将元素添加到数组中。
但是作为程序员,我们可以编写一个。
其中我提供了一种实用程序方法,可用于将元素添加到数组中。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at com.theitroad.examples.ArrayIndexOutOfBoundExample.main(ArrayIndexOutOfBoundExample.java:18)
上面程序的输出是:
package com.theitroad.examples; import java.util.Arrays; import java.util.List; public class ArrayConversionExample { public static void main(String[] args) { //initializing an array String[] strings = {"one", "two", "three", "four", "five"}; //Converting array to list List<String> list = Arrays.asList(strings); System.out.println("Array to List : "+list); //Converting list to array String[] strings2 = list.toArray(new String[list.size()]); System.out.println("List to Array :"); for (String string : strings2) { System.out.println(string); } } }
从数组中删除元素
下面是一个简单的程序,用于从数组中删除元素。
Array to List : [one, two, three, four, five] List to Array : one two three four five
上面程序的输出是:
package com.theitroad.examples; import java.util.Arrays; public class ArraysSortExample { public static void main(String[] args) { //initializing an array of Character char[] chars = {'B', 'D', 'C', 'A', 'E'}; //sorting array of Character Arrays.sort(chars); System.out.print("Sorted Characters : "); for (char character : chars) { System.out.print(character+" "); } //initializing an array of Integer int[] integers = {5, 2, 1, 4, 3}; //sorting array of Integer Arrays.sort(integers); System.out.print("\nSorted Integers : "); for (int i : integers) { System.out.print(i+" "); } } }