1. Array数组
数组是指一组相同类型的数据的集合,数组中的每个数据被称作元素。同一个数组里存放的元素类型必须一致。
- Define: 数据类型[] 数组名 = new数据类型[元素个数或数组长度];
int[] arr = new int[100];
为了更好地理解数组的这种定义方式,可以将上面的一句代码分成两句来写,具体如下:
int[] x; // 声明一个int[]类型的变量
x = new int[100];// 创建一个长度为100的数组
第一行代码 int[] x; 声明了一个变量x,该变量的类型为int[],即一个int类型的数组。变量x会占用一块内存单元,它没有被分配初始值。内存中的状态如下图所示:
第二行代码 x = new int[100]; 创建了一个数组,将数组的地址赋值给变量x。在程序运行期间可以使用变量x来引用数组,这时内存中的状态会发生变化,如下图所示:
直接初始化定义:
int[] arr = new int[]{1,2,3,4};int[] arr = { 1, 2, 3, 4 };
访问元素:
arr[2]- length属性:
int length = arr.length; - Traverse: ```java for(int i=0; i< arr.length; i++){ System.out.println(arr[i]); }
for(int num : arr){ System.out.println(num); }
<a name="IJiO1"></a># 2. Two Dimensional Array- Define:- 第一种定义格式:`int[][] arr = new int[3][4];`<br />上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组。- 第二种定义格式:`int[][] arr = new int[3][];` 第二种方式和第一种类似,只是数组中每个元素的长度不确定:<br />- 第三种定义格式:`int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};`<br />二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9}:<br />- Visit: `arr[0][1]`- Traverse:```javapublic static void main(String[] args){int[][] arr = {{1,2},{3,4,5},{6,7,8,,9,10}};int sum = 0;for(int i=0; i<arr.length; i++){for(int j=0; j<arr[i].length; j++){sum += arr[i][j];}}System.our.println("sum = "+sum);}
3. Array Practice
A. Reverse

public static void receive(int[] arr){for (int start = 0, end = arr.length-1; start < end; start++,end--) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;}}
B. Pop Sort - 交换排序

/***冒泡排序:数组的相邻元素排序.每次循环会将最大值放到数组的末尾.*外循环控制要跑的次数*内循环控制相邻元素的交换*/public static void popSort(int[]array){if(array==null || array.length<=1){return;}for(inti=0; i<array.length-1; i++){boolean isSwitched=false;for(intj=1; j<array.length-i; j++){if(array[j-1] > array[j]){inttemp = array[j];array[j] = array[j-1];array[j-1] = temp;isSwitched = true;}}//If the array is already sorted,quit the program.if(!isSwitched){break;}}}
C. Binary Search
前提:被查找的数组中的元素必须是有序的.
public static int bianrySearch(int[] arr, int target){int low = 0;int high = arr.length-1;while(low<=high){int mid = low + (high-low)/2; //防止high+low的数过大导致内存溢出if(arr[mid] == target){return mid;}else if(arr[mid] > target){high = mid -1;}else if(arr[mid] < target){low = mid + 1;}}return -1;}
4. java.util.Arrays
Arrays是数组的工具类, 此类包含用来操作数组(比如排序和搜索)的各种方法。需要注意,如果指定数组引用为 null,则访问此类中的方法都会抛出空指针异常NullPointerException。
常用方法:
- int binarySearch(int[] a, int key)
- void sort(int[] a) 或 void sort(int[] a, Competitor competitor)
- String toString(int[] a)
- equals()和deepEquals()方法:判断两个数组是否相等。
基本类型数组:boolean equals(int[] a, int[] a2)
引用类型数组:boolean deepEquals(Object[] a1, Object[] a2) int[] copyOf(int[] originarlArr, newLength) ==> 可用于数组resize
int[] arr1 = new int[] {45, 32, 75};int[] arr2 = Arrays.copyOf(arr1, 5);System.out.println(Arrays.toString(arr2));
int[] copyOfRange(int[] array, int from, int to) ==> from包含,to不包含
- List
asList(Integer[] array) ==> array的元素类型必须是Wrapper类型 - System类方法,复制数组:
void arraycopy(int[] src, int srcPos, int[] dest, int destPos, int length)public static void function_4(){int[] src = {11,22,33,44,55,66};int[] desc = {77,88,99,0};//将src数组的1位置开始(包含1位置)的两个元素,拷贝到desc的1,2位置上System.arraycopy(src, 1, desc, 1, 2);for(int i = 0 ; i < desc.length ; i++){System.out.println(desc[i]);}}
