复制数组10.20
把一个数的值,复制到另一个数组中
System.arraycopy(src,srcPos,dest,destPos,lengh)
src:源数组
srcPos:从源数组复制数据的起始位置
dest:目标数组
destPos:复制到目标数组的起始位置
length:复制的长度
package operator;
public class Demo02 {
public static void main(String[] args) {
int a [] = new int[]{15,61,85,68,45,8,9};
int b [] = new int[3]; //只给出了长度为3的空间,没有赋值
//方法一:使用for循环 b[i] = a[i];
// 默认的长度是b数组的3个长度空间
for (int i = 0; i < b.length; i++){
b[i] = a[i];
}
//方法二:System.arraycopy(src, srcPos, dest, destPos, length)
//src: 源数组
//srcPos: 从源数组复制数据的起始位置
//dest: 目标数组
//destPos: 复制到目标数组的起始位置
//length: 复制的长度空间
System.arraycopy(a, 0, b, 0, 3);
//打印内容
for (int i = 0; i < b.length; i++){
System.out.println(b[i] + " ");
}
}
}
练习-合并数组
准备两个数组,长度都是5-10之前的随机数,并使用随机数初始化该两个数组
然后准备第三个数组,第三个数组的长度空间是前两个数组的和
通过System.arraycopy把前两个数组合并到第三个数组中
package operator;
public class Demo02 {
public static void main(String[] args) {
//练习-合并两个数组到第三个
int [] a = new int[(int) (Math.random()*5) + 5];
int [] b = new int[(int) (Math.random()*5) + 5];
int [] c = new int[a.length + b.length]; //令c数组的长度为a和b的长度空间
//a数组
System.out.println("数组a的内容:");
for (int i = 0; i < a.length; i++){
a[i] = (int) (Math.random() *100); //前面学习的Math随机
System.out.println(a[i] + " ");
}
System.out.println();
//b数组
System.out.println("数组b的内容:");
for (int i = 0; i < b.length; i++){
b[i] = (int) (Math.random() *100);
System.out.println(b[i] + " ");
}
System.out.println();
//c数组
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
//destPos 目标数组的
// 起始位置是a数组的长度a.length
//length 长度空间是b数组的b.length
System.out.println("合并后的数组是:");
for (int x : c){
System.out.println(x + " ");
}
}
}
二维数组
int a[] = new int[]{1,2,3,4,5}; //这是一个数组,里面的元素都是一个基本类型int
int b[][] = new int[][]{
{1,2,3},
{4,5,6},
{7,8,9}
};
//这是一个二维数组,里面的每一个元素,都是一个一堆数组,所以二维数组又叫数组的数组
package operator;
public class Demo01 {
//数组命名区别
public static void main(String[] args) {
//初始化二维数组
int [][] a = new int[2][3]; //有两个一维数组,每个一维数组的长度是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,8,9,7}
};
}
}
练习:定义一个5X5的二维数组。然后使用随机数填充该二维数组。找出该二维数组里最大的值,并打印出现在二维坐标。
0-100随机整数的获取方法,参考方法之一:
(int) (Math.random()*100) //Math.random()会得到一个0-1之间的随机浮点数,然后乘以100,并强转为整数
package operator;
public class Demo01 {
public static void main(String[] args) {
//练习: 遍历二维数组并找出最大值及下标
int[][] array = new int[5][5];
int max = 0;
int c = 1;
int x=0,y=0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
array[i][j] = (int) (Math.random()*100+1);
if (array[i][j] > max) {
max = array[i][j];
x = i;
y = j;
}
if (array[i][j]<10) {
System.out.print("0"+array[i][j]+" ");
}else {
System.out.print(array[i][j]+" ");
}
if (c%5 == 0) {
System.out.println();
}
c++;
}
}
System.out.println("最大值:"+ max + "\n坐标是:("+x+","+y+")");
}
}
数组Arrays
Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能。 大大提高了开发人员的工作效率。
关键字 | 简介 |
---|---|
copyOfRange | 数组复制 |
toString() | 转换为字符串 |
sort | 排序 |
binarySearch | 搜索 |
equals | 判断是否相同 |
fill | 填充 |
代码示例
数组复制: copyOfRange
package bese;
import java.util.Arrays;
//Arrays提供了一个copyOfRange方法进行数组复制,不同于System.arraycopy 需要准备好目标数组,并分配长度。
//copyOfRange 只需要源数组就可以,通过返回值
//注意:copyOfRange的3个参数,如下显示,表示的意思及结束的位置是无法取到的。
public class Demo02 {
public static void main(String[] args) {
int a[] = new int[]{18,62,66,86,53,8};
//使用copyOfRange(int[] original,int from, int to)
// 第一个参数标识源数组
// 第二个参数表示开始位置(可以取得到)
// 第三个参数表示结束位置(取不到)
int[] b = Arrays.copyOfRange(a,0,3);
for (int i = 0; i < b.length; i++){
System.out.println(b[i] + " ");
}
}
}
/***
* ░░░░░░░░░░░░░░░░░░░░░░░░▄░░
* ░░░░░░░░░▐█░░░░░░░░░░░▄▀▒▌░
* ░░░░░░░░▐▀▒█░░░░░░░░▄▀▒▒▒▐
* ░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐
* ░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐
* ░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌
* ░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒
* ░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐
* ░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄
* ░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒
* ▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒
* 单身狗就这样默默地看着你,一句话也不说。
*/
转换为字符串: toString()
package bese;
import java.util.Arrays;
public class Demo03 {
public static void main(String[] args) {
//之前学习的,需要打印一个数组的内容是通过for循环遍历,逐一打印
//Arrays 提供了toString(),直接把一个数组转换为字符串,然后再打印
int a[] = new int[]{18,16,85,15,42,6};
String content = Arrays.toString(a); //soString转字符串,content内容
System.out.println(content); //打印内容
}
}
/*
╭⌒╮¤ `
╭╭ ⌒╮ ●╭○╮
╰ ----╯/█∨█\
~~~~~~~~~~∏~~∏~~~~~~~~~~~
*/
排序
package bese;
import java.util.Arrays;
public class Demo02 {
public static void main(String[] args) {
//前面学习使用的是选择法和冒泡法
//这里使用的是Arrays工具类提供的sort排序
int a[] = new int[]{11,18,66,68,52,8};
System.out.println("排序前:");
System.out.println(Arrays.toString(a)); //打印数组a,转字符串打印
Arrays.sort(a); //sort进行排序,顺序是从小到大
System.out.println("排序后:");
System.out.println(Arrays.toString(a));
}
}
搜索
package bese;
import java.util.Arrays;
//查询元素出现的位置
//使用binarySearch查找前,必须要先使用sort进行排序
//数组中有多个相同的元素,查找结果是不确定的
public class Demo03 {
public static void main(String[] args) {
int a[] = new int[]{18,16,85,15,42,6};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//使用binarySearch前,必须先使用sor排序
System.out.println("数字 85出现的位置:" + Arrays.binarySearch(a,85));
}
}
判断是否相同
package bese;
import java.util.Arrays;
//比较2个数组的内容是否一致
//第二个数组的第2个元素8,和第一个不一样,所以比较结果是false
public class Demo02 {
public static void main(String[] args) {
int a[] = new int[]{11,18,66,68,52,8};
int b[] = new int[]{11,8,66,68,52,8};
System.out.println(Arrays.equals(a,b)); //判断不相同返回值 false
}
}
填充
package bese;
import java.util.Arrays;
public class Demo03 {
public static void main(String[] args) {
//使用同一个值填充数组,使用比较少
int a[] = new int[10];
Arrays.fill(a,5); //填充到a数组,值5
System.out.println(Arrays.toString(a));
}
}
/*
╭⌒╮¤ `
╭╭ ⌒╮ ●╭○╮
╰ ----╯/█∨█\
~~~~~~~~~~∏~~∏~~~~~~~~~~~
*/
————————————————