Java零基础入门-Collections详解!

举报
喵手 发表于 2024/08/31 17:08:51 2024/08/31
【摘要】 ​哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望...

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

        小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

一、前言

        论前几期啊,我们是分别讲了Object类Date类FormDate类Calendar类System类StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。

        在前几期,我们是有讲过Collection类的,不知道大家还是否有印象,我们都知道,Collection分为两类,一类是单列集合,一类是双列集合。

        而今天我们就来讲一期Collections(其包位置:java.utils.Collections),它?与Collection类?不要误解,Collections是一集合工具类,用来对集合进行一系列操作的工具类。

二、常用api

1️⃣public static void shuffle(List<?> list)

        其作用:将集合元素打乱顺序。

2️⃣public static <T> boolean addAll(Collection<? super T> c, T... elements) 

        其作用:往集合中添加一些指定元素

3️⃣public static <T extends Comparable<? super T>> void sort(List<T> list)

        其作用:将集合中的元素按默认的规则进行排序。

4️⃣public static <T> void sort(List<T> list, Comparator<? super T> c)

        其作用:将集合中的元素按指定的规则进行排序。

...

        还有些其他的api,这个就等大家好好去研究研究了呀。如下是对其具体的想起解读:

1️⃣ public static void shuffle(List<?> list)

作用: 将集合中的元素顺序打乱。

拓展解释:
shuffle 方法用于将指定的列表进行随机排序。这在需要将元素随机化的情况下非常有用,例如打乱一副牌的顺序。

源码解读:


public static void shuffle(List<?> list) { Random rnd = new Random(); for (int i = list.size(); i > 1; i--) { swap(list, i - 1, rnd.nextInt(i)); } }

shuffle 方法使用了 Random 类生成随机数,并通过循环将列表中的元素随机交换位置。swap 方法负责交换列表中两个指定索引处的元素。


2️⃣ public static <T> boolean addAll(Collection<? super T> c, T... elements)

作用: 将指定的元素添加到集合中。

拓展解释:
addAll 方法允许将多个元素一次性添加到指定的集合中,这样可以简化添加多个元素的操作。它的泛型参数 T 代表元素的类型,Collection<? super T> 允许目标集合接受 TT 的任意父类作为元素类型。

源码解读:

public static <T> boolean addAll(Collection<? super T> c, T... elements) { boolean modified = false; for (T element : elements) { if (c.add(element)) { modified = true; } } return modified; }

addAll 方法遍历所有传入的元素,并将它们添加到集合 c 中。如果集合因此发生了变化,则返回 true,否则返回 false


3️⃣ public static <T extends Comparable<? super T>> void sort(List<T> list)

作用: 按照默认规则对集合元素进行排序。

拓展解释:
sort 方法基于元素的自然顺序对列表进行排序。实现 Comparable 接口的元素可以定义自己的比较规则,这个方法按照这些规则对元素进行排序,例如数字按从小到大排序,字符串按字典顺序排序。

源码解读:


public static <T extends Comparable<? super T>> void sort(List<T> list) { list.sort(null); }

sort 方法实际上调用了 List 接口中的 sort 方法,传入 null 表示按元素的自然顺序排序。list.sort(null) 等价于 Collections.sort(list)


4️⃣ public static <T> void sort(List<T> list, Comparator<? super T> c)

作用: 按照指定规则对集合元素进行排序。

拓展解释:
sort 方法允许通过传入自定义的比较器 (Comparator) 来定义元素的排序规则。与自然排序不同,比较器可以实现更复杂的排序逻辑,例如按某个对象的多个属性排序或按降序排列。

源码解读:

public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }

该方法同样是调用 List 接口的 sort 方法,这次传入了自定义的 Comparator 对象 c。这个 Comparator 定义了列表中元素的比较逻辑,从而决定了排序的顺序。

三、实例演示

1️⃣shuffle()

        如下我实例来演示一下如何通过Collections工具集进行shuffle()方法进行实操,仅供参考。

具体演示代码如下:

    @Test
    public void testShuffle(){

        List<String> list = new ArrayList<>();

        //采用工具类往集合中一并添加元素
        Collections.addAll(list, "a", "b", "c", "d");

        System.out.println("打乱前:" + list);

        //对list元素进行打乱
        Collections.shuffle(list);

        System.out.println("打乱后:" + list);
    }

控制台打印输出:

2️⃣addAll()

        如下我实例来演示一下如何通过Collections工具集进行addAll()方法进行实操,仅供参考。

具体演示代码如下:

    @Test
    public void testAddAll() {

        List<String> list = new ArrayList<>();
        //传统元素添加方式:
        //比如如下传统添加,是一个一个add
//        list.add("a");
//        list.add("b");
//        list.add("c");
//        list.add("d");

        //而采用工具类往集合中可以一行一并添加元素
        Collections.addAll(list,"b","a","d","c");

        //list集合打印
        System.out.println(list);
    }

控制台打印输出:

[b, a, d, c]

3️⃣sort(List<T> list)

        如下我实例来演示一下如何通过Collections工具集进行sort(List<T> list)方法进行实操,仅供参考。

具体演示代码如下:

    @Test
    public void testSort() {

        List<String> list = new ArrayList<>();

        //采用工具类往集合中一并添加元素
        Collections.addAll(list, "b", "a", "d", "c");

        System.out.println("排序前:" + list);

        //对list进行排序
        Collections.sort(list);

        System.out.println("排序前:" + list);
    }

控制台打印输出:

4️⃣sort(List<T> list, Comparator<? super T> c)

       说起Comparator比较器。那就有一段好说了,上述演示sort()是直接默认字符串排序,其实就等于public final class String implements java.io.Serializable, Comparable<String>, CharSequence{}.

        String类实现了这个接口,并完成了比较规则的定义,但是这样就把这种排序规则写死了,那比如我想要字符串按照第一个字符降序排列,那这样的话我岂不是就要修改String的源代码?这显然不可能去修改String源码的,那我们怎么解决?

        那么这个时候我们就可以使用sort(List<T> list,Comparator<? super T> ) 这个方法灵活的完成,其中里头涉及到一个重要参数Comparator<? super T>,那么它究竟是啥,请跟随我看下文:

四、Comparator比较器

1️⃣概述:

        Comparator<? super T>接口,位于java.util包下。排序是Comparator能实现的功能之一,该接口代表一个比较器,比较器具有可比性!通俗地讲就是需要比较两个对象谁排在前谁排在后,那么比较的方法就是:比较其两个参数的顺序。

public int compare(String o1, String o2)

其中两个对象(o1,o2)比较的结果有三种:大于,等于,小于。
如果要按照升序排序:则o1 小于o2,返回(负数),相等返回0,01大于02返回(正数)。

如果要按照降序排序:则o1 小于o2,返回(正数),相等返回0,01大于02返回(负数)。

2️⃣按首字母降序排序演示:

演示。按首字母进行降序排序。

具体演示代码如下:

    @Test
    public void testSortComparator() {

        List<String> list = new ArrayList<>();

        //采用工具类往集合中一并添加元素
        Collections.addAll(list, "abc", "dab", "bac", "cad");

        //默认排序
        Collections.sort(list);
        System.out.println("默认sort排序为:" + list);

        //排序规则:按照第一个单词的降序
        Collections.sort(list, new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                return o2.charAt(0) - o1.charAt(0);
            }
        });
        System.out.println("指定首字母降序排序为:" + list);
    }


3️⃣按首字母升序排序演示:

 倘若你要首字母升序,你就改成o1.charAt(0) - o2.charAt(0) 即可。

... ...

       好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。

五、小结

在本文中,我们深入探讨了 `Collections` 工具类中的几个常用方法,包括 `shuffle()`、`addAll()`、`sort()` 等。这些方法提供了强大的功能,使我们能够轻松地对集合进行随机化、批量添加元素、排序等操作。通过对这些方法的源码解读和实例演示,我们不仅了解了其背后的实现原理,还掌握了如何在实际开发中灵活运用这些工具。

六、总结

通过本文的学习,相信大家对 `Collections` 工具类有了更深的理解。无论是想要打乱集合顺序,还是按照自定义规则对集合进行排序,`Collections` 都为我们提供了简洁而高效的解决方案。同时,希望大家能从本文的内容中获取灵感,在实际开发中应用这些知识,并在不断的实践中提升自己的技术水平。正如文中所提到的,学习是一个互相促进、共同进步的过程,愿我们在技术的道路上携手并进,成为更好的自己。

如果你对文中的内容有任何疑问或想法,欢迎在评论区留言交流,我们一起探讨,共同进步!

七、结尾

       教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。