深入探究Java集合工具类Collections的神奇功能

目录

addAll方法:轻松集合合并

shuffle方法:集合元素随机排列

sort方法:集合元素排序

自定义排序规则:Comparator


> 🎈个人主页:程序员 小侯
 🎐CSDN新晋作者
 🎉欢迎 👍点赞✍评论⭐收藏
✨收录专栏:Java知识介绍
 ✨适用于:Java初学者
🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

简介:在Java编程中,集合是一项强大而常用的工具,但有时我们需要在集合上执行一些更高级的操作。这时就会用到Java提供的`Collections`工具类。`Collections`类为集合提供了一系列的静态方法,能够轻松地执行各种操作,从添加元素到随机排序,甚至是根据特定规则进行排序。本篇文章将带您深入了解`Collections`工具类,探索其背后的神奇功能。

addAll方法:轻松集合合并

  • addAll方法允许我们将多个元素添加到一个集合中。其使用形式为:
static <T> boolean addAll(Collection<? super T> c, T... elements)
//示例
List<String> list1 = new ArrayList<>(Arrays.asList("apple", "banana"));
List<String> list2 = new ArrayList<>(Arrays.asList("orange", "grape"));

Collections.addAll(list1, "kiwi", "cherry");

System.out.println(list1); // 输出: [apple, banana, kiwi, cherry]

 这个方法特别强大,因为它允许我们将一组元素添加到指定集合中,同时要求容器中的元素的类型是添加元素的同类型或其父类型及其祖辈。这为集合的合并提供了灵活性和安全性。

shuffle方法:集合元素随机排列

  • shuffle方法的作用是将指定的列表元素进行随机排列。这对于需要随机性的需求非常有用,比如洗牌算法等。
static void shuffle(List<?> list)
//示例
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

Collections.shuffle(numbers);

System.out.println(numbers); // 输出类似: [4, 2, 5, 1, 3]

sort方法:集合元素排序

  • sort方法可以将列表按照升序排序,根据其元素的自然排序规则。对于实现了Comparable接口的类,比如StringInteger等,已经有默认的排序规则。这个方法的使用形式为:
static <T extends Comparable<? super T>> void sort(List<T> list)
//示例,考虑一个名为 Student 的自定义类,我们想按照学生的年龄升序排序:
class Student implements Comparable<Student> {
    String name;
    int age;

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

    @Override
    public int compareTo(Student other) {
        return this.age - other.age; // 按年龄升序
    }

    @Override
    public String toString() {
        return name + " (" + age + " years)";
    }
}

public class Main {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 22));
        students.add(new Student("Bob", 19));
        students.add(new Student("Charlie", 25));

        Collections.sort(students);

        for (Student student : students) {
            System.out.println(student);
        }
    }
}

结果:

Bob (19 years)
Alice (22 years)
Charlie (25 years)

如果我们想要自定义排序规则,可以实现Comparable接口,重写compareTo方法,以指定排序规则。

查找和替换(Search and Replace)

  • Collections.binarySearch() 方法可以在有序列表中进行二分查
  • Collections.replaceAll() 可以用一个值替换列表中的所有旧值。
public class SearchAndReplaceExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5));

        // 使用 Collections.binarySearch() 查找元素索引
        int index = Collections.binarySearch(numbers, 5);

        // 使用 Collections.replaceAll() 替换所有的旧值
        Collections.replaceAll(numbers, 5, 8);

        System.out.println("Index of 5: " + index);
        System.out.println("Modified List: " + numbers);
    }
}

自定义排序规则:Comparator

  • 有时候默认的排序规则并不满足我们的需求,这时我们可以使用Comparator接口,实现自定义的排序规则。Comparator允许我们根据自己的需要来排序元素。Collections类的sort方法也提供了使用Comparator的重载版本,使得我们可以根据指定的比较器进行排序:
static <T> void sort(List<T> list, Comparator<? super T> c)
//示例,如果我们想按照学生姓名的首字母进行升序排列,如果首字母相同则按照年龄降序排列:

class NameFirstLetterComparator implements Comparator<Student> {
    @Override
    public int compare(Student student1, Student student2) {
        int nameComparison = student1.name.substring(0, 1).compareTo(student2.name.substring(0, 1));
        if (nameComparison == 0) {
            return student2.age - student1.age; // 按年龄降序
        }
        return nameComparison;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 22));
        students.add(new Student("Alan", 25));
        students.add(new Student("Bob", 19));
        students.add(new Student("Charlie", 25));

        Collections.sort(students, new NameFirstLetterComparator());

        for (Student student : students) {
            System.out.println(student);
        }
    }
}

结果:

Alan (25 years)
Alice (22 years)
Bob (19 years)
Charlie (25 years)

 ComparableComparator虽然功能相似,但有一些区别。Comparable已经被一些类(如StringInteger)实现,而且已经重写过排序方法,比较规则已经固定。而Comparator在使用时可以重写排序方法,指定排序规则,更加灵活。

这两种方式可以结合使用。如果排序规则已经确定,可以实现Comparable,并重写compareTo方法。而当规则有变动时,可以灵活切换至Comparator,并根据需求重写compare方法。

后记 👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员 小侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值