数组
数组是保存同一类型数据的定长容器对象
数组元素的索引下表从0开始
声明数组
int[] anArray;
数组的类型type[] 和数组的名称
声明实际上并不创建数组; 它只是告诉编译器该变量将包含指定类型的数组。
也可以把括号放在数组名字后面: int anArray[];(不推荐)
创建数组
关键字 :new
anArray = new int[10];
创建并初始化数组
int[] anArray2 = {
100, 200, 300,
400, 500, 600,
700, 800, 900, 1000
};
返回匿名数组
return new int[]{1,1,1}
为数组赋值
anArray[0] = 100;
anArray[1] = 200;
anArray[2] = 300;
访问数组
System.out.println("Element 1 at index 0: " + anArray[0]);
数组长度
数组的长度是arr.length
注意区别于字符串的s.length()
打印数组
直接输出数组,得到的是其地址,底层调用了Object的toString()
System.out.println(new int[]{1,2,3});//[I@1b6d3586
因此我们可以遍历数组进行打印
想要把数组转换成字符串,可以使用
Arrays.toString()
多维数组
String[][] names = {
{"Mr. ", "Mrs. ", "Ms. "},
{"Smith", "Jones"}
};
复制数组
方法:System.arraycopy
public static void arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
两个 Object 参数指定要复制的数组和要复制到的数组。
三个 int 参数指定源数组中的起始位置、目标数组中的起始位置以及要复制的数组元素的数量。
class ArrayCopyDemo {
public static void main(String[] args) {
String[] copyFrom = {
"Affogato", "Americano", "Cappuccino", "Corretto", "Cortado",
"Doppio", "Espresso", "Frappucino", "Freddo", "Lungo", "Macchiato",
"Marocchino", "Ristretto" };
String[] copyTo = new String[7];
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
for (String coffee : copyTo) {
System.out.print(coffee + " ");
}
}
}
起别名
请注意,数组名表示的是整个数组——如果我们将一个数组变量赋予另一个变量,那么两个变 量将会指向同一个数组。例如以下这段代码:
int[] a = new int[N]; … a[i] = 1234; … int[] b = a; … b[i] = 5678; // a[i] 的值也会变成 5678 这种情况叫做起别名,有时可能会导致难以察觉的问题。如果你是想将数组复制一份,那么应该声明、 创建并初始化一个新的数组,然后将原数组中的元素值挨个复制到新数组
数组的操作
java.util
复制数组
copyOfRange
和arraycopy不同之处在于,使用 copyOfRange 方法不需要在调用方法之前创建目标数组,因为目标数组由方法返回:
copyOfRange 方法的第二个参数是要复制的范围的初始索引(包括),而第三个参数是要复制的范围的最终索引(不包括)。
class ArrayCopyOfDemo {
public static void main(String[] args) {
String[] copyFrom = {
"Affogato", "Americano", "Cappuccino", "Corretto", "Cortado",
"Doppio", "Espresso", "Frappucino", "Freddo", "Lungo", "Macchiato",
"Marocchino", "Ristretto" };
String[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);
for (String coffee : copyTo) {
System.out.print(coffee + " ");
}
}
}
搜索索引
在数组中搜索特定值以获取放置该数组的索引(binarySearch 方法)。
System.out.println(Arrays.binarySearch(names,"Lungo"));//9
比较
比较两个数组以确定它们是否相等(equals 方法)。
System.out.println(java.util.Arrays.equals(array,array2));//true
System.out.println(array.equals(array2));//true
填充
填充数组以在每个索引处放置特定值(fill 方法)。
排序
将数组按升序排序。这可以使用sort方法顺序完成,也可以使用 javase8中引入的 parallelSort 方法并发完成。
在多处理机系统上,大型数组的parallelSort排序比sort排序要快。
Arrays.sort(nums);
toString
将数组转换为字符串。toString 方法将数组的每个元素转换为字符串,用逗号分隔元素,然后用中括号包围元素。
public class Test {
public static void main(String[] args) {
String[] names = {
"Affogato", "Americano", "Cappuccino"};
System.out.println(names.toString());//[Ljava.lang.String;@5cad8086
System.out.println(java.util.Arrays.toString(names));//[Affogato, Americano, Cappuccino]
}
}