欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java可变参数,Collection集合工具类,shuffle方法,Collections.sort方法

程序员文章站 2024-01-18 22:10:40
...

1、可变参数

可变参数:是JDK1.5之后出现的新特性
使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。
使用格式:定义方法时使用
修饰符 返回值类型 方法名(数据类型…变量名){ }
可变参数的原理:
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数。
传递的参数个数,可以是0个(不传递)1,2,3,4…多个
代码举例:

public class Demo01VarArgs {
    public static void main(String[] args) {

        int i = add(10, 20, 30, 40, 50, 60);
        System.out.println(i);
    }

    /*
    定义计算(0—n)整数和的方法
    已知:计算整数的和,数据类型已经确定int
    但是参数的个数不确定,不知道计算几个整数的和,就可以使用可变参数
    add();就会创建长度为0的数组,new int[0]
    add(10, 20, 30);就会创建一个长度为3的数组,存储传递的参数:new int[3];
     */

    public static int add(int...arr) {
//        System.out.println(arr); //[[email protected]
//        System.out.println(arr.length);
        //定义一个初始化的变量,记录累加求和
        int sum = 0;

        //遍历数组中的元素
        for (int i : arr) {
            sum += i;
        }
        return sum;
    }

    //定义一个方法,计算两个int整数的和
//    public static int add2(int a, int b) {
//        return a + b;
//    }
    //计算三个整数的和
//    public static int add3(int a, int b, int c) {
//        return a + b + c;
//    }
}

可变参数的注意事项:
1、一个方法的参数列表,只能有一个可变参数
2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾。
终极写法:

public static void method(Object...obj){
}

2、Collection集合工具类

部分常用方法:
public static boolean addAll(Collection c, T…elements);往集合中添加一些元素
public static void shuffle(List<?> list) 打乱顺序:打乱集合的顺序。

public class Demo01Collections {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        //往集合中添加多个元素add方法
//        list.add("黄佳林");
//        list.add("倪文瀚");
//        list.add("高佳林");
//        list.add("红佳林");
//        System.out.println(list);

        //addAll方法
        Collections.addAll(list,"a","b","e", "f", "g");
        System.out.println(list); //[a, b, e, f, g]
        
        //打乱顺序
        Collections.shuffle(list);
        System.out.println(list); //[f, b, g, a, e]

    }
}

public static void sort(List list):将集合中元素按照默认规则排序。
注意:sort方法使用前提:
被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序中的规则。
Comparable排序规则:
自己(this)- 参数:升序
参数- 自己(this):降序
对象类:

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person() {
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(Person o) {
        //return 0; //认为元素都是相同的
        //自定义比较的规则,比较两个人的年龄(this, 参数Person)
        return this.getAge() - o.getAge();  //年龄升序排序
    }
}

实现类:

public class Demo02Sort {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(5);
        list.add(0);
        list.add(8);
        list.add(7);
        System.out.println(list); //[1, 2, 5, 0, 8, 7]

        //sort方法排序
        Collections.sort(list);
        System.out.println(list); //[0, 1, 2, 5, 7, 8]

        ArrayList<String> list1 = new ArrayList<>();
        list1.add("a");
        list1.add("d");
        list1.add("b");
        list1.add("c");
        System.out.println(list1); //[a, d, b, c]

        Collections.sort(list1);
        System.out.println(list1); //[a, b, c, d]

        ArrayList<Person> list2 = new ArrayList<>();
        list2.add(new Person("张三",18));
        list2.add(new Person("李四",20));
        list2.add(new Person("王五",17));
        System.out.println(list2);
        //[Person{name='张三', age=18}, Person{name='李四', age=20}, Person{name='王五', age=17}]

        Collections.sort(list2);
        System.out.println(list2);
        //[Person{name='王五', age=17}, Person{name='张三', age=18}, Person{name='李四', age=20}]

    }
}

public static void sort(List list, Comparator<? super T> ):将集合中的元素按照指定规则排序
对象类:

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

实现类:

public class Demo03Sort {
    public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(4);
        list1.add(2);
        list1.add(3);
        System.out.println(list1); //[1, 4, 2, 3]

        Collections.sort(list1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });
        System.out.println(list1); // [1, 2, 3, 4]

        ArrayList<Student> list2 = new ArrayList<>();
        list2.add(new Student("迪丽热巴", 20));
        list2.add(new Student("杨幂", 19));
        list2.add(new Student("王雷", 21));
        list2.add(new Student("俄哈弗", 15));

        Collections.sort(list2, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        System.out.println(list2);
        //[Student{name='俄哈弗', age=15}, Student{name='杨幂', age=19}, Student{name='迪丽热巴', age=20}, Student{name='王雷', age=21}]
    }
}
相关标签: java