JavaSE基本知识补充(第三篇)-可变参数工具类
目录
1. 可变参数
2. 工具类Arrays
1. Arrays.fill() --填充数组
2. Arrays.sort() --数组排序
3. Arrays.toString() 打印
4. Arrays.equals() -比较是否相等
5. Arrays.binarySearch() -二分查找得下标
6. Arrays.copeOf() -截数组
3. 工具类Collections
1. sort()-对集合中的元素排序。
2.reverse()-反转
3. shuffle() 打乱
4. fill( , T) 用T元素替换掉集合中的所有的元素
5. copy(a,b) -复制b覆盖a
6. min/max() -找最大/最小
7. swap(list,a,b) -交换位置a和b的值
8. rotate(list,a) 向后移a,循环
9.indexOfSubList(list,sub) sub在list中第一次出现的位置
10. replaceAll(list,a,b) 将a替换成b
面试题:
1. 可变参数
可变参数的语法:
修饰符 返回值类型 方法名(数据类型…变量){
}
public class DynamicParamDemo {
public static void main(String[] args) {
//int result = add(10, 10);
int result = add(new int[]{10, 20, 30});
System.out.println(result);
}
//数据类型 ... 变量这是可变参数的定义方式
//可以代表数组, 还可以代表单个数的传递
//如果调用的时候我们发现了正好能匹配的方法就不会调用可变参数的方法,如果不存在这个一个正好调用的方法就会调用可变参数的方法
public static int add(int... a){
int total = 0;
for (int i = 0; i < a.length ; i++) {
total += a[i];
}
return total;
}
/*public static int add(int a, int b){
return a + b;
}*/
}
2. 工具类Arrays
Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。
import java.util.Arrays;
1. Arrays.fill() --填充数组
所有值
int[] arr = new int[5];//新建一个大小为5的数组
Arrays.fill(arr,4);//给所有值赋值4
String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[4, 4, 4, 4, 4]
左闭右开
int[] arr = new int[5];//新建一个大小为5的数组
Arrays.fill(arr, 2,4,6);//给第2位(0开始)到第4位(不包括)赋值6 左闭右开
String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[0, 0, 6, 6, 0]
2. Arrays.sort() --数组排序
$$ 1. 数字排序
int[] intArray = new int[] { 4, 1, 3, -23 };
Arrays.sort(intArray);
//输出: [-23, 1, 3, 4]
$$2. 字符串排序,先大写后小写
String[] strArray = new String[] { “z”, “a”, “C” };
Arrays.sort(strArray);
//输出: [C, a, z]
$$3. 严格按字母表顺序排序,也就是忽略大小写排序
Case_insensitive_sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
//输出: [a, C, z]
$$4. 反向排序
reverseOrder()
Arrays.sort(strArray, Collections.reverseOrder());
//输出:[z, a, C]
$$5. 忽略大小写反向排序
Case_insensitive_ORDER
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(Arrays.asList(strArray));
//输出: [z, C, a]
$$6. 数组指定位置排序
int[] arr = {3,2,1,5,4};
Arrays.sort(arr,0,3);//给第0位(0开始)到第3位(不包括)排序 左闭右开
String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[1, 2, 3, 5, 4]
3. Arrays.toString() 打印
int[] arr = {3,2,1,5,4};
System.out.print(arr);//直接将数组打印输出
//输出:[I@7852e922 (数组的地址)
String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
//System.out.print(str);
//输出:[3, 2, 1, 5, 4]
4. Arrays.equals() -比较是否相等
int[] arr1 = {1,2,3};
int[] arr2 = {1,2,3};
System.out.println(Arrays.equals(arr1,arr2));
//输出:true
//如果是arr1.equals(arr2),则返回false,因为equals比较的是两个对象的地址,不是里面的数,而Arrays.equals重写了equals,所以,这里能比较元素是否相等。
5. Arrays.binarySearch() -二分查找得下标
注意!!
数组要排好序
找值
int[] arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 30));
//输出:2 (下标索引值从0开始)
在指定位置找值
int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,30));
//输出:2 (从0到3位(不包括)找30,找到了,在第2位,返回2)
6. Arrays.copeOf() -截数组
int[] arr = {10,20,30,40,50};
int[] arr1 = Arrays.copyOf(arr, 3);
String str = Arrays.toString(arr1); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[10, 20, 30] (截取arr数组的3个元素赋值给新数组arr1)
指定范围:
int []arr = {10,20,30,40,50};
int []arr1 = Arrays.copyOfRange(arr,1,3);
String str = Arrays.toString(arr1); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[20, 30] (从第1位(0开始)截取到第3位(不包括))
3. 工具类Collections
1. sort()-对集合中的元素排序。
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(5);
list.add(3);
list.add(4);
list.add(1);
Collections.sort(list);
System.out.println(list);
}
}
Output:
[1, 2, 3, 4, 5]
2.reverse()-反转
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i< 5; i++){
list.add(i+1);
}
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
}
}
Output:
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
3. shuffle() 打乱
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i< 5; i++){
list.add(i+1);
}
Collections.shuffle(list);
System.out.println(list);
}
}
Output:(每次都不同)
eg:[4, 2, 1, 3, 5]
4. fill( , T) 用T元素替换掉集合中的所有的元素
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i< 5; i++){
list.add(i+1);
}
System.out.println(list);
Collections.fill(list,6);
System.out.println(list);
}
}
Output:
[1, 2, 3, 4, 5]
[6, 6, 6, 6, 6]
5. copy(a,b) -复制b覆盖a
public class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<Integer>();
for(int i = 0;i< 5; i++){
list1.add(i+1);
}
List<Integer> list2 = new ArrayList<Integer>();
for(int i = 0;i<5;i++){
list2.add(i+6);
}
System.out.println(list1);
Collections.copy(list1,list2);
System.out.println(list1);
}
}
Output:
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
6. min/max() -找最大/最小
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i< 10; i++){
list.add(i+1);
}
System.out.println(Collections.max(list));
System.out.println(Collections.min(list));
}
}
Output:
10
1
7. swap(list,a,b) -交换位置a和b的值
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i< 10; i++){
list.add(i+1);
}
Collections.swap(list,3,4);
System.out.println(list);
}
}
Output:
[1, 2, 3, 5, 4, 6, 7, 8, 9, 10]
8. rotate(list,a) 向后移a,循环
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i< 5; i++){
list.add(i+1);
}
Collections.rotate(list,2);
System.out.println(list);
Collections.rotate(list,-2);
System.out.println(list);
}
}
Output:
[4, 5, 1, 2, 3]
[1, 2, 3, 4, 5]
9.indexOfSubList(list,sub) sub在list中第一次出现的位置
与之相对应的:
lastIndexOfSubList
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,3,3,4,5));
List<Integer> subList = new ArrayList<Integer>();
subList.add(3);
System.out.println(Collections.indexOfSubList(list,subList));
System.out.println(Collections.lastIndexOfSubList(list,subList));
}
}
Output:
2
4
10. replaceAll(list,a,b) 将a替换成b
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6));
System.out.println(Collections.replaceAll(list,3,36));
System.out.println(list);
}
}
Output:
true
[1, 2, 36, 4, 5, 6]
面试题:
问:Collection和Collections的区别:
前者是集合的接口 集合体系的最上层接口
后者操作集合的工具类