Java 数组详解 - 用法/遍历/排序/实用API

2015-07-28· 15019 次浏览
## 概述 数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式,这些按序排列的同类数据元素的集合称为数组。 组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。 ## 一维数组 ### 动态初始化 ```java int[] array = new int[3]; // 两种方式都可以 // int array[] = new int[3]; array[0] = 1; array[1] = 2; array[2] = 3; System.out.println(array[0]); ``` ### 静态初始化 ```java int[] array = { 1, 2, 3, 4 }; int[] array1 = new int[] { 1, 2, 3, 4 }; System.out.println(array[2]); System.out.println(array1[2]); ``` ### 默认初始化 ```java int[] array = new int[4]; System.out.println(array[2]); ``` ### 获取数组的长度 ```java int[] array = new int[10]; int length = array.length; System.out.println("数组array的长度是:" + length); ``` ## 二维数组 ### 二维数组初始化 同一维数组一样,共有4总不同形式的定义方法: ```java int[][] array1 = new int[10][10]; int array2[][] = new int[10][10]; int array3[][] = { { 1, 1, 1 }, { 2, 2, 2 } }; int array4[][] = new int[][] { { 1, 1, 1 }, { 2, 2, 2 } }; ``` ### 不定长二维数组 ```java int[][] array = new int[3][]; array[0] = new int[1]; array[1] = new int[2]; array[2] = new int[3]; ``` ### 获取二维数组的长度 ```java int length1 = array.length; int length2 = array[0].length; // 获取二维数组的第一维长度(3) System.out.println(length1); // 获取二维数组的第一维的第一个数组长度(1) System.out.println(length2); ``` ## 数组遍历 ### 传统方式遍历 ```java int[] array = new int[] { 1, 2, 3 }; for (int i = 0; i < array.length; i++) { System.out.println("array[" + i + "] = " + array[i]); } ``` ### 增强for循环方式遍历 ```java int[] array = new int[] { 1, 2, 3 }; for (int i : array) { System.out.println(i); } ``` ## 数组排序 ```java int[] array = { 3, 2, 1, 4, 5 }; Arrays.sort(array); System.out.println(Arrays.toString(array)); ``` 常用的排序方法有冒泡排序、快速排序、选择排序、插入排序、希尔(Shell)排序、堆排序。可参考[Java 数组排序](http://baike.xsoftlab.net/view/79.html) ## 数组异常 ### 数组下标越界异常  在java中,数组下标从0开始,我们定义了一个长度为3的数组,想要从中取出第四位,便会抛出java.lang.ArrayIndexOutOfBoundsException。 ```java int[] array = new int[] { 1, 2, 3 };  System.out.println(array[3]); ``` ## 实用API ### 输出数组 ```java int[] array = { 1, 2, 3 }; System.out.println(Arrays.toString(array)); ``` ### 数组转List ```java String[] array = { "a", "b", "c", "d", "e" }; List list = new ArrayList(Arrays.asList(array)); System.out.println(list); ``` ### 数组转Set ```java String[] array = { "a", "b", "c", "d", "e" }; Set set = new HashSet(Arrays.asList(array)); System.out.println(set); ``` ### List转数组 ```java List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); String[] array = new String[list.size()]; list.toArray(array); for (String s : array) System.out.println(s); ``` ### 数组中是否包含某个值 ```java String[] array = { "a", "b", "c", "d", "e" }; boolean b = Arrays.asList(array).contains("a"); System.out.println(b); ``` ### ### 数组复制 ```java int array[] = new int[] { 1, 2, 3, 4 }; int array1[] = new int[array.length]; System.arraycopy(array, 0, array1, 0, array.length); ``` ### 数组合并 ```java int[] array1 = { 1, 2, 3, 4, 5 }; int[] array2 = { 6, 7, 8, 9, 10 }; int[] array = org.apache.commons.lang.ArrayUtils.addAll(array1, array2); System.out.println(Arrays.toString(array)); ``` ### String数组转字符串(使用指定字符拼接) ```java String[] array = { "a", "b", "c" }; String str = org.apache.commons.lang.StringUtils.join(array, ", "); System.out.println(str); ``` ### 数组逆序 ```java int[] array = { 1, 2, 3, 4, 5 }; org.apache.commons.lang.ArrayUtils.reverse(array); System.out.println(Arrays.toString(array)); ``` ### 数组元素移除 ```java int[] array = { 1, 2, 3, 4, 5 }; int[] removed = org.apache.commons.lang.ArrayUtils.removeElement(array, 3); System.out.println(Arrays.toString(removed)); ```