数组Arrays
1. 数组复制1.1 概述1.2 用法1.3 程序范例1.3.1 利用System.arraycopy实现1.3.2 利用copyOfRange实现
2. 数组转换为字符串2.1 概述2.2 程序范例
3. 数组排序3.1 概述3.2 程序范例
4. 数组元素查找4.1 概述4.2 程序范例
4. 判断数组是否相等4.1 概述4.2 程序范例
5. 数组填充5.1 概述5.2 程序范例
6. 数组扩展6.1 题目6.2 思路6.3 程序实现
Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能。 大大提高了开发人员的工作效率。
1. 数组复制
1.1 概述
与使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。copyOfRange 只需要源数组就就可以了,通过返回值,就能够得到目标数组了。
1.2 用法
System.arraycopy(int[] original, int from1, int[] object, int from2,int length) // 第一个参数表示源数组的名称
// 第二个参数表示开始位置(取得到),即复制的数组中包含源数组的第from1个元素
// 第三个参数表示目标数组,即复制操作完成后得到的数组
// 第四个参数表示目标数组的起始位置,即源数组复制过来的元素从目标数组的第from2位开始存储
//第五个参数表示数组复制的长度
int [] object =copyOfRange(int[] original, int from, int to) //object指目标数组,即复制操作完成后得到的数组
// 第一个参数表示源数组的名称
// 第二个参数表示开始位置(取得到),即复制的数组中包含源数组的第from个元素
// 第三个参数表示结束位置(取不到),即复制的数组中不包含源数组的第to个元素
1.3 程序范例
给定数组A={16,8,4,15,14}和B={2,1,5,11,22,45},利用数组复制操作输出数组C={16,8,4,2,1}。
1.3.1 利用System.arraycopy实现
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[] {16,8,4,15,14};
int b[] = new int[]{2,1,5,11,22,45};
int e[]=new int[5];
System.arraycopy(a, 0, e, 0, 3);
System.arraycopy(b, 0, e, 3, 2);
//增强型for循环
for (int ee:e)
System.out.print(ee + " ");
}
}
1.3.2 利用copyOfRange实现
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[] {16,8,4,15,14};
int b[] = new int[]{2,1,5,11,22,45};
// copyOfRange(int[] original, int from, int to)
// 第一个参数表示源数组
// 第二个参数表示开始位置(取得到)
// 第三个参数表示结束位置(取不到)
int[] c = Arrays.copyOfRange(a, 0, 3);
int[] d = Arrays.copyOfRange(b, 0, 2);
int[] e=new int[c.length+d.length];
for (int i = 0; i < e.length; i++) {
if(i<c.length)
e[i]=c[i];
else
e[i]=d[i-c.length];
}
//增强型for循环
for (int ee:e)
System.out.print(ee + " ");
}
}
2. 数组转换为字符串
2.1 概述
如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印。
但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容。
2.2 程序范例
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[] {16,8,4,15,14};
//增强型for循环
for (int aa:a) {
System.out.print(aa + " ");
}
System.out.println(" ");
//用toString()方法将数组转换为字符串
String aaa= Arrays.toString(a);
System.out.print(aaa);
}
}
3. 数组排序
3.1 概述
Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能。
实现数组元素从小到大的正排序。
3.2 程序范例
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[] {16,8,4,15,14};
System.out.println("排序之前的数组:");
//增强型for循环
for (int aa:a) {
System.out.print(aa + " ");
}
System.out.println(" ");
System.out.println("排序之后的数组:");
//用toString()方法将数组转换为字符串
Arrays.sort(a);
for (int bb:a) {
System.out.print(bb + " ");
}
}
}
4. 数组元素查找
4.1 概述
查询某特定元素出现的位置,需要注意的是,使用binarySearch(a,b)进行查找之前,必须使用sort进行排序。其中参数a指被搜索
的数组,参数b指需要查找的特定元素。
注意:如果数组中有多个相同的元素,查找结果是不确定的。
4.2 程序范例
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[] {16,8,4,15,14};
//利用Arrays.sort()实现数组排序
Arrays.sort(a);
//查找元素15的位置
System.out.println("元素15所在的位置是"+ Arrays.binarySearch(a,15));
}
}
4. 判断数组是否相等
4.1 概述
比较两个数组的内容是否一样,使用equals(a,b)进行数组比较。判断数组a,b是否相等,输出结果为true或false。
4.2 程序范例
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[] {16,8,4,15,14};
int b[] = new int[] {16,8,4,15,20};
System.out.println("数组a和b是否相等? "+" "+ Arrays.equals(a,b));
}
}
数组a和b的最后一个元素并不相同,所以输出为false。
5. 数组填充
5.1 概述
利用fill(a,b)进行数组填充。参数a是被填充的数组,b是填充值。
5.2 程序范例
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[4];
Arrays.fill(a, 5);
String aaa=Arrays.toString(a);
System.out.println(aaa);
}
}
生成一个长度为4的一维数组,数组中的所有元素都是5。
6. 数组扩展
6.1 题目
首先定义一个5X8的二维数组,然后使用随机数填充满。
借助Arrays的方法对二维数组进行排序。
6.2 思路
先把二维数组使用System.arraycopy进行数组复制到一个一维数组。
然后使用sort进行排序 最后再复制回到二维数组。
6.3 程序实现
import java.util.Arrays;// import的使用引入Arrays类
public class HelloWorld {
public static void main(String[] args) {
int a[][] = new int[5][8];//生成一个5*8的数组
for (int i=0;i<5;i++) {
for (int j=0;j<8;j++) {
a[i][j]=(int) (Math.random()*100);
}
}//用0-100的随机数填充
int b[]=new int[40];
for (int i=0;i<5;i++) {
System.arraycopy(a[i], 0, b,8*i, 8);
}//将数组a转换为一维数组b
Arrays.sort(b);
for (int i=0;i<5;i++) {
System.arraycopy(b, 8*i, a[i],0, 8);
}
for (int i=0;i<5;i++) {
for (int j=0;j<8;j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println(" ");
}
}
}