数组的创建
一个数组变量实际上存储的是数组的引用,严格地讲,一个数组变量和一个数组是不同的,可陈述为:“myList是一个含有10个double类型元素的数组的引用变量”。
一维数组
(1)elementType[] arrayName = new elementType[arraySize];
(2)double [] myList = {1.9, 2.0, 3.4, 4.5};
二维数组
int [][] =new int[5][6];
- “动态数组”
单独介绍
数组的复制
Java中可以使用赋值语句赋值基本数据类型的变量,但是不能复制数组。将一个数组变量赋值给另一个数组变量,实际上只是将其引用复制,是两个变量指向相同的内存地址。
复制数组有三种方法:
1. 使用循环语句逐个复制数组元素;
int[] sourceArray = {1, 2, 3, 4, 5};
int[] targetArray = new int[sourceArray.length];
for(int i = 0; i < sourceArray.length; i++) {
targetArray[i] = sourceArray[i];
}
使用
java.lang.System
类的arraycopy
方法复制数组;arraycopy(sourceArray, src_pos, targetArray, tar_pos, length);
两个pos指起始位置,复制length个元素。
注意:arraycopy
方法违反了Java命名规范,正常应为驼峰。
可变长参数列表
可以把类型相同但是个数可变的参数传递给方法,方法中的参数声明如下:
typeName...parameterName
在方法声明中,指定类型后紧跟着省略号。只能给方法中指定一个变长参数,同时该参数必须是最后一个参数,任何常规参数必须在他之前。
Java将可变长参数当成数组对待,可以将一个数组或可变长的参数传递给方法。举例如下:
public class VarArgs {
public static void main(String[] args) {
Max(13, 5, 9, 2, 64, 1, 59);
Max(new int[] {13, 5, 9, 2, 64, 1, 59});
}
public static void Max(int...nums) {
if(nums.length == 0) {
System.out.println("No aegument passed");
return;
}
int result = nums[0];
for(int i = 0; i < nums.length; i++) {
if(nums[i] > result) {
result = nums[i];
}
}
System.out.println(result);
}
}
Arrays类
为了实现数组的排序和查找、数组的比较和对数组填充元素,java.util.Arrays类包含各种静态方法,这些方法对所有基本类型有重载方法。
- 排序: sort()方法
int[] nums = {13, 5, 9, 2, 64, 1, 59};
java.util.Arrays.sort(nums);
char[] chars = {'a', 'F', 'A', '4', 'D', '*', 'b' ,'9', 'z'};
java.util.Arrays.sort(chars, 2, 5);//将第2位到第5位排序
- 二分查找:binarySearch()方法
数组必须提前按照增序排列好,否则返回负数。
char[] chars = {'a', 'b', 'd'};
java.util.Arrays.binarySearch(chars, 'a');
- 检查数组是否相等:equals()方法
int[] nums1 = {13, 5, 9, 2, 64, 1, 59};
int[] nums2 = {13, 5, 9, 2, 64, 1, 59};
bool isEqual = java.util.Arrays.equals(nums1, nums2);
- 填充数组:fill()方法
char[] chars = {'a', 'F', 'A', '4', 'D', '*', 'b' ,'9', 'z'};
java.util.Arrays.fill(list, 'c');
java.util.Arrays.fill(list, 1, 5, 'c');//将第1位到第5位填充为‘c’字符