初识Arrays类
一、Arrays类简要说明
Arrays类位置:java.util.Arrays
Java中,数组本身并没提供什么方法,因此额外提供了Arrays工具类
针对数组进行一些常见操作。
Arrays类中的方法都是 带static修饰符的,因而可以直接使用类名调用,而不用new对象再调用。
二、Arrays类常用方法示例:
1. 给数组赋值:
通过
fill()
方法实现,改变数组内相应下标的数组元素的值。package com.zctou.array; import java.util.Arrays; public class ArrayDemo07 { public static void main(String[] args) { int[] a = new int[10]; Arrays.fill(a,2); //把数组a的所有数组元素值改变成2 System.out.println(Arrays.toString(a)); Arrays.fill(a,2,5,3); //把下标从[2,5)的数组元素的值改成3,注意区间:左闭右开 System.out.println(Arrays.toString(a)); } }
输出:
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2] [2, 2, 3, 3, 3, 2, 2, 2, 2, 2] //只改变[2,4]的值,下标为5的元素值没变
2. 给数组排序:
通过
sort()
方法实现,给相应的数组按升序排序。public class ArrayDemo06 { public static void main(String[] args) { int[] nums = {1,2,34,325,34,5,46,3,49,0,9,45,2,36,4}; Arrays.sort(nums); System.out.println(Arrays.toString(nums)); } }
输出:
[0, 1, 2, 2, 3, 4, 5, 9, 34, 34, 36, 45, 46, 49, 325]
3. 数组元素比较:
通过
equals()
比较数组元素的值是否相等。package com.zctou.array; import java.util.Arrays; public class ArrayDemo07 { public static void main(String[] args) { int[] a1 = {1,23,54,6,56,54,4}; int[] a2 = {1,23,54,6,56,54,0}; System.out.println(Arrays.equals(a2,a1)); //equals比较数组是否相等 } }
输出:
false
4. 查找数组元素:
通过
binraySearch()
对已经排好序的数组进行二分法查找相应的元素,并返回下标。
- 如果数组内存在该元素,则返回该元素所在的下标。
- 如果找不到,就会返加
-插入点 -1
。所谓 插入点,就是要查找的数在数组内的区间范围的左边下标。
- 要找元素在数组左边界,插入点 为 0;
- 要找元素在数组右边界,插入点 为 -array.lenth;
- 要找元素在数元素范围内,插入点 为 -(区间左下标+1);
- 示例一:找到相应元素,输出相应下标
package com.zctou.array; import java.util.Arrays; public class ArrayDemo07 { public static void main(String[] args) { int[] a2 = {1,23,54,6,56,54,0}; Arrays.sort(a2); System.out.println(Arrays.toString(a2)); //[0, 1, 6, 23, 54, 54, 56] //在数组内找到23这个值的相应下标,结果为3 System.out.println(Arrays.binarySearch(a2, 23)); } }
输出:
[0, 1, 6, 23, 54, 54, 56] 3
- 示例二:找不到相应下标,输出
-插入点-1
package com.zctou.array; import java.util.Arrays; public class ArrayDemo07 { public static void main(String[] args) { int[] a2 = {1,23,54,6,56,54,0}; Arrays.sort(a2); // 排序结果:[0, 1, 6, 23, 54, 54, 56] System.out.println(Arrays.toString(a2)); // 找到相应元素,下标为: // 3 System.out.println(Arrays.binarySearch(a2, 23)); // 找不到相应元素,元素10位于[6-23]之间 // 相应下标就是[2-3]之间,插入点就是-(区间左下标+1):-(2+1)=-3 // 返回值就是“插入点-1”:-3-1=-4 // -4 System.out.println(Arrays.binarySearch(a2, 10)); // 找不到相应元素,元素-2,在数组左边界(-无穷,0] // 插入点就是 0 // 返回值就是“插入点-1”:0-1=-1 // -1 System.out.println(Arrays.binarySearch(a2,-2)); //元素-20,超出数组左边界,插入点为0 //返回插入点-1 = 0-1 = -1 //-1 System.out.println(Arrays.binarySearch(a2,-20)); // 找不到相应元素,元素-2左数组左边界[56,+无穷) // 插入点就是: -数组长度(arr.length),也就是 -7, // 返回值就是“插入点-1”:-7-1=-8 // -8 System.out.println(Arrays.binarySearch(a2,57)); // -8 System.out.println(Arrays.binarySearch(a2,570)); } }
输出:
[0, 1, 6, 23, 54, 54, 56] 3 //Arrays.binarySearch(a2, 23); -4 //Arrays.binarySearch(a2, 10); -1 //Arrays.binarySearch(a2,-2); -1 //Arrays.binarySearch(a2,-20); -8 //Arrays.binarySearch(a2,57); -8 //Arrays.binarySearch(a2,570);
5. 打印数组
通过
toString()
打印数组,所数组拼接成字符串输出。package com.zctou.array; import java.util.Arrays; public class ArrayDemo06 { public static void main(String[] args) { int[] nums = {1,2,34,325,34,5,46,3,49,0,9,45,2,36,4}; System.out.println(Arrays.toString(nums)); } }
输出:
[0, 1, 2, 2, 3, 4, 5, 9, 34, 34, 36, 45, 46, 49, 325]
写在最后:
Arrays类的所有方法都是非必须掌握的,这些方法只是对常用功能做了归纳,方便调用而已。完全可以自己写出同样效果的方法,如toString的打印效果:
package com.zctou.array;
import java.util.Arrays;
public class ArrayDemo06 {
public static void main(String[] args) {
int[] nums = {1,2,34,325,34,5,46,3,49,0,9,45,2,36,4};
System.out.println(Arrays.toString(nums));
printArray(nums); //自定义打印方法
}
//自己定义打印一维数组
public static void printArray(int[] args) {
if(args == null) {
System.out.println("空数组");
return;
}
if(args.length==1) {
System.out.println("[]");
return;
}
//非空一维数组打印
for (int i = 0; i < args.length; i++) {
if(i==0) {
System.out.print("[");
}
System.out.print(args[i]);
if(i== args.length-1) {
System.out.println("]");
} else{
System.out.print(", ");
}
}
}
}
输出:
[1, 2, 34, 325, 34, 5, 46, 3, 49, 0, 9, 45, 2, 36, 4]
[1, 2, 34, 325, 34, 5, 46, 3, 49, 0, 9, 45, 2, 36, 4]