Java数组

时间:2020-02-23 14:36:22  来源:igfitidea点击:

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+" ");
		}
	}
}