当前位置: 首页 > article >正文

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的区别

前者是集合的接口     集合体系的最上层接口

后者操作集合的工具类


http://www.kler.cn/a/541866.html

相关文章:

  • chromium-mojo
  • 修复缺失的tobii.gameintegration.dll文件,让游戏更顺畅
  • 【JVM详解二】常量池
  • IDEA查看项目依赖包及其版本
  • C# 比较两个List集合内容是否相同
  • MATLAB中extract 函数用法
  • 实战shiro有key无链rce
  • mysql 学习11 事务,事务简介,事务操作,事务四大特性,并发事务问题,事务隔离级别
  • FANUC机器人示教器中如何显示或关闭寄存器或IO的注释信息?
  • AI时代下的安全新基石:零信任架构在人工智能系统中的应用
  • [python]png转webp的命令行工具
  • PyCharm结合DeepSeek-R1
  • JUnit5 单元测试详解
  • centos 7 关于引用stdatomic.h的问题
  • 【Git】完美解决git push报错403
  • 【20250211】栈与队列:225.用队列实现栈
  • 采集学校食堂人脸识别证件照,且尺寸底色统一的方法
  • 数据驱动企业数据智能化发展-通过财务数据分析模型评估企业经营健康度
  • ListWise 排序技术综述:从传统领域到大模型领域的跨越
  • APP广告变现,对接聚合广告平台创建广告位流程
  • dpdk的基础使用-抓包
  • RESTful开发中对象的合理使用探究
  • 分布式服务框架 如何设计一个更合理的协议
  • 爬取彩票网站数据
  • rpx和px混用方案
  • 【2024最新Java面试宝典】—— SpringBoot面试题(44道含答案)_java spingboot 面试题