Java高级---Collections类

Java高级—Collections类

Collections类和Collection接口是完全两个不同的东西,大家一定要清楚。
Collections类和之前讲的Arrays类一样,都是工具类。一个对集合操作,一个对数组。

一、Collections类中常用的方法:

1.swap(List list, int i, int j) :将指定列表中的两个索引进行位置互换

2.sort(List list) :按照列表中元素的自然顺序进行排序

3.shuffle(List list):随机置换

4.reverse(List list) :反转

5.fill(List list, Object obj) :使用指定的对象填充指定列表的所有元素

6.copy(List dest, List src) :是把源列表中的数据覆盖到目标列表

7.binarySearch(List list, Object key) 使用二分查找法查找指定元素在指定列表的索引位置

8.max()\min():查找最大\最小值

这里我们看一下Collections的sort的源码
【注意:Collections类中的sort其实就是Arrays类中的sort】
点开Collections.sort就会看到
在这里插入图片描述
再点进去,注意看:先转成object数组,然后利用Arrays.sort进行排序,是不是突然发现了什么
在这里插入图片描述
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、两种比较方式

当我们要进行自定义比较的时候,就会使用下面的两种方式。
在这里插入图片描述
1、使用Comparator进行比较(不推荐)
重写 compare方法

具体实现:

ArrayList<Integer> list = new ArrayList();
list.add(49);
list.add(29);
list.add(88);
list.add(-49);
list.add(56);

System.out.println(list);
Collections.sort(list);     //默认升序
System.out.println(list);

Collections.sort(list, new Comparator<Integer>() {	//这里就是匿名内部类,重写了compare方法
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;       //降序:o2-o1,升序:o1-o2
    }
});
System.out.println(list);

为什么不推荐,原因就是每次比较都要重写compare方法,麻烦

2、使用Comparable进行比较(推荐)
重写compareTo方法

要求:根据学生的成绩进行比较排序
具体实现:
Student类:

public class Student  implements Comparable<Student>{
    private String name;
    private String gender;
    private int score;

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

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

    public String getName() {
        return name;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public double getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return  "姓名:" + name + "\t" +
                "性别:" + gender + "\t"+
                "成绩:" + score ;
    }

    @Override
    public int compareTo(Student o) {		//重写compareTo方法
        return this.score-o.score;			//成绩升序
    }
}

测试类:

Student s1 = new Student("Jack","男",98);
Student s2 = new Student("Alis","女",87);
Student s3 = new Student("Louis","女",59);
Student s4 = new Student("Tom","男",88);

List<Student> list = new LinkedList();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);

Collections.sort(list);
System.out.println(list);

结果显示
在这里插入图片描述
这样就比较方便,一次写好,全类共享。

猜你喜欢

转载自blog.csdn.net/qq_43288259/article/details/113194379