System.arraycopy(src,
srcPos, dest, destPos, length)
src:源数组
srcPos:复制源数组的起始位置
dest:目标数组
destPos:复制目标数组的起始位置
length:复制长度
举个例子:复制一个数组前3个
1 2 3 4 5 6 7 8 9 10 11 12
| package Array;
public class copyArray { public static void main(String[] args) { int a[] = new int[]{18, 62, 68, 82, 65, 9}; int b[] = new int[3]; System.arraycopy(a, 0, b, 0, 3); for(int item: b) { System.out.print(item + " "); } } }
|
output
1 2 3 4 5 6 7
| exercise 首先准备两个数组,他俩的长度是5-10之间的随机数,并使用随机数初始化这两个数组 ([向数组填充随机数](https://how2j.cn/k/array/array-create/280.html#step2182)的办法,[参考这里](https://how2j.cn/k/array/array-create/280.html#step2182))
然后准备第三个数组,第三个数组的长度是前两个的和 通过System.arraycopy 把前两个数组合并到第三个数组中
|
java中产生随机数:
Math.random():产生0-1的浮点数
Math.random()*100:产生0-100的浮点数
(Math.random() + 6) * 10:产生5-10的浮点数
anser
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
package Array;
public class mergeArray { public static void main(String[] args) { int lengthA = (int)(Math.random() * 6) + 5; int lengthB = (int)(Math.random() * 6) + 5; int lengthC = lengthA + lengthB; int[] a = new int[lengthA]; System.out.println("数组A:"); for(int i = 0; i < lengthA; i++) { a[i] = (int)(Math.random() * 10); System.out.print(a[i] + " "); } System.out.println(); int[] b = new int[lengthB]; System.out.println("数组B:"); for(int i = 0; i < lengthB; i++) { b[i] = (int)(Math.random() * 10); System.out.print(b[i] + " "); } int[] c = new int[lengthC]; System.arraycopy(a, 0, c, 0, lengthA); System.arraycopy(b, 0, c, lengthA, lengthB); for(int item : c) { System.out.print(item + " "); } } }
|
二维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class HelloWorld { public static void main(String[] args) { int[][] a = new int[2][3]; a[1][2] = 5; int[][] b = new int[2][]; b[0] =new int[3]; b[0][2] = 5; int[][] c = new int[][]{ {1,2,4}, {4,5}, {6,7,8,9} };
} }
|
二维数组要求每个空间都必须先new才能使用(就是往里面放东西)
二维数组不一定要等长
exercise
1 2
| 定义一个5X5的二维数组。 然后使用随机数填充该二维数组。 找出这个二维数组里,最大的那个值,并打印出其二维坐标
|
answer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
package Array; class maxNum { int val; int x; int y; public maxNum(){
} public maxNum(int val, int x, int y) { this.val = val; this.x = x; this.y = y; } } public class twoDimensionArray { public static void main(String[] args) { int[][] a = new int[5][5]; for(int i = 0; i < 5; i++) { for(int j = 0; j < 5; j++) { a[i][j] = (int)(Math.random() * 6 +5); System.out.print(a[i][j] + " "); } System.out.println(); } maxNum max = new maxNum(0, 0, 0); for(int i = 0; i < 5; i++) { for(int j = 0; j < 5; j++) { if(a[i][j] > max.val) { max.val = a[i][j]; max.x = i; max.y = j; } } } System.out.printf("最大:%d 横坐标:%d 纵坐标:%d", max.val, max.x, max.y); } }
|
java.util.Arrays类常用方法
数组复制
与使用System.arraycopy进行数组复制类似的,
Arrays提供了一个copyOfRange方法进行数组复制。
不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。
copyOfRange 只需要源数组就就可以了,就是目标数组不需要new
举例
1 2 3 4 5 6 7 8 9 10 11 12 13
| package Array;
import java.util.Arrays;
public class copyOfArray { public static void main(String[] args) { int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; int[] b = Arrays.copyOfRange(a, 0, 3); for(int item : b) { System.out.print(item + " "); } } }
|
数组转换为字符串
通过Arrays.toString(a)
举例
1 2 3 4 5 6 7 8 9 10 11 12 13
| package Array;
import java.util.Arrays;
public class arrayToString { public static void main(String[] args) { int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; System.out.println("a的类别是:" + a.getClass().getName()); String stringA = Arrays.toString(a); System.out.println(stringA); System.out.println("stringA的类型是:" + stringA.getClass().getName()); } }
|
输出
1 2 3
| a的类别是:[I [18, 62, 68, 82, 65, 9] stringA的类型是:java.lang.String
|
排序
Arrays.sort(a)
举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package Array;
import java.util.Arrays;
public class arraySort { public static void main(String[] args) { int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; System.out.println("排序前:"); System.out.println(Arrays.toString(a)); System.out.println("排序后:"); Arrays.sort(a); System.out.println(Arrays.toString(a)); } }
|
输出
1 2 3 4
| 排序前: [18, 62, 68, 82, 65, 9] 排序后: [9, 18, 62, 65, 68, 82]
|
搜索
查询元素出现的位置
需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序
如果数组中有多个相同的元素,查找结果是不确定的
1 2 3 4 5 6 7 8 9 10 11
| package Array;
import java.util.Arrays;
public class search { public static void main(String[] args) { int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; Arrays.sort(a); System.out.println("数字62出现的位置" + Arrays.binarySearch(a, 62)); } }
|
输出
比较两个数组是否相同
1 2 3 4 5 6 7 8 9 10 11
| package Array;
import java.util.Arrays;
public class compare { public static void main(String[] args) { int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; int b[] = new int[] { 18, 62, 68, 82, 65, 8 }; System.out.println(Arrays.equals(a, b)); } }
|
输出
填充
举例
1 2 3 4 5 6 7 8 9 10 11
| package Array;
import java.util.Arrays;
public class fill { public static void main(String[] args) { int[] a = new int[10]; Arrays.fill(a, 5); System.out.println(Arrays.toString(a)); } }
|
输出
1
| [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
|
exercise
1 2 3 4 5 6
| 首先定义一个5X8的二维数组,然后使用随机数填充满。 借助Arrays的方法对二维数组进行排序。 参考思路: 先把二维数组使用System.arraycopy进行数组复制到一个一维数组 然后使用sort进行排序 最后再复制回到二维数组。
|
answer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| package Array.Arrays_method;
import java.util.Arrays;
public class exercise { public static void main(String[] args) { int[][] a = new int[5][8]; for(int i = 0; i < 5; i++) { for(int j = 0; j < 8; j++) { a[i][j] = (int)(Math.random() * 40); System.out.print(a[i][j] + " "); } System.out.println(); } int[] tmp = new int[40]; for(int i = 0; i < 5; i++) { System.arraycopy(a[i], 0, tmp, i * 8, 8); } System.out.println(); for(int i = 0; i < 40; i++) { System.out.print(tmp[i] + " "); if((i + 1) % 8 == 0) { System.out.println(); } } System.out.println(); Arrays.sort(tmp); for(int i = 0; i < 5; i++) { a[i] = Arrays.copyOfRange(tmp, i * 8, (i + 1) * 8); } for(int i = 0; i < 5; i++) { for(int j = 0; j < 8; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } } }
|