[TOC]
在Java中,数组有两种声明方式:
int a[];
int[] a;
java程序员一般习惯用第二种。
赋值方式基本与C语言一致,下面来看一个小例子:
public class FirstSample {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5};
char[] chars = {'a', 'b', 'c', 'd', 'e'};
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
}
}
数组拷贝可以分为两种,借用C++的说法
废话不多说,先看浅拷贝:
直接利用等号进行拷贝
public class FirstSample {
public static void main(String[] args) {
int[] nums1 = {1, 2, 3, 4, 5};
int[] nums2 = nums1;
nums2[4] = 21;
for (int e : nums1) {
System.out.println(e);
}
System.out.println("----------");
for(int e : nums2) {
System.out.println(e);
}
}
}
可以知道,浅拷贝生成的数组,与原数组指向同样的数组,其中一个改变也会带动另外一个改变
利用Array类的copyOf方法,代码如下:
import java.util.Arrays;
public class FirstSample {
public static void main(String[] args) {
int[] nums1 = {1, 2, 3, 4, 5};
int[] nums2 = Arrays.copyOf(nums1, nums1.length);
nums2[4] = 21;
for (int e : nums1) {
System.out.println(e);
}
System.out.println("----------");
for(int e : nums2) {
System.out.println(e);
}
}
}
深拷贝创建了全新的数组,如下图所示:
每一个Java应用程序,都有一个带String args[]参数的main方法。这个参数表明main方法将接受一个字符串数组,我们称之为命令行参数
导入类java.util.Arrays
的静态方法,来对数组进行操作:
static String toString(type[] a) 返回a中数据元素的字符串,这些数据元素被放在括号内,并用逗号分割
参数:a 类型为int, long, short, char, byte, boolean, float或double的数目
- static type copyOf(type[] a, int length)
- static type copyOf(type[] a, int start, int end)
返回与a类型相同的数组,其长度为length或者end-start,数组元素为a的值。
参数:a 类型为int, long, short, char, byte, boolean, float或double的数目
start 起始下标(包含这个值)
end 终止下标(不包含这个值),如果end大于a.length,在这种情况下,结果为0或false
length 拷贝的数据元素长度。如果length只大于a.length,结果为0或者false
- static void sort(type[] a) 采用优化的快速排序算法对数组进行排序
参数:a类型为int, long, short, char, byte, boolean, float或double的数目
- static int binarySearch(type[] a, type v)
- static int binarySearch(Type[] a, int start, int end, type v)
采用二分搜索算法查找值 v,如果成功,则返回相应的下标值;否则,返回一个负数值。
参数:a
start 起始下标
end 终止下标
v 同a的数据元素类型相同的值
- static void fill(type[] a, type v)
将数组的所有元素值设为v
static boolean equals(type[] a, type[] b)
如果两个数组大小相等,数组内对应元素相等,返回true
- static void arraycopy(Object from, int fromIndex, Object to, int toIndex, int count)
参数:from 任意类型的数组
fromIndex 原始数组中待拷贝元素的起始下标
to 与from同类型的数组
toIndex 目标数组放置拷贝元素的起始下标
count 拷贝的元素数量
double[][] balances;
int[][] nums = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
for-each循环不能处理二维数组的每一个元素,它是按照行,也就是一维数组来处理的。
for(double[] row : a) {
for(double value : row) {
do something with value
}
}
java的多维数组可以看作是多个一维数组的集合。
下面这个例子,创建了一个三角形的多维数组
public class FirstSample {
public static void main(String[] args) {
int[][] odds = new int[10][];
for(int n = 0; n < 10; n++) {
odds[n] = new int[n+1];
}
for(int[] row : odds) {
for(int value : row) {
System.out.print(value);
}
System.out.println();
}
}
}