java中的Collections工具类

        Collections类是java中提供的一个工具类,它和接口Collection乍一看非常相像,但是二者的区别是非常大的,最明显的就是它们一个是类,而另一个是接口了。Collections工具类的作用是对Set 、Map、 List这些容器提供辅助方法来对容器中的元素进行排序、填充、查找等操作。

        在Collecctions工具类中的方法是极多的,三言两语难以说尽,因此这里我们只简单介绍几个常用的方法,对Collections工具类有个认识即可,对于不常用的方法,用到时进行简单类比即可。Collections工具类中的所有方法均为静态方法,因此在使用时只需要通过类名就可以对对应的方法进行进行调用。在Collections类中,我们常用的方法有sort、shufle、reverse、fill以及binnarySearch。这几个方法的具体作用如下:

        void sort(List):对List容器内的元素进行排序,排序规则按照升序;

        void shufle(List):对List容器内的元素进行随机排列;

        void reverse(List):对List容器内的元素进行逆序排列;

        void fill(List):用一个特定的对象重写整个List容器;

        int binnarySearch(List,Object):对于顺序的List容器,采用折半查找的方法查找指定对象,并返回该对象的索引。

        以上介绍的几个方法都是对List接口来说的因此在它们的参数中都需要传入一个List类型的容器。接下来我们演示这几个方法当中的前两个来说命Collections类的使用,其余的方法除了功能不同,用法是基本一样的。首先创建一个CollectionsTest类,在这个类中实例化一个List型容器list。容器list的泛型类型为String,因此添加的元素只能是String类型。将a,b,c,d乱序添加进容器list中,并遍历容器list中的元素,用作对照。

        由于Collections类中的方法均为静态方法,因此使用当中用的方法直接通过类名调用即可。通过Colkections调用sort方法,并将list作为参数传入。当我们再次遍历容器list中的元素是会发现元素的顺序从c、b、d、a变成了a、b、c、d。这就是sort的排序效果。

        需要说明的是,上面的这个排序操作是按照默认排序规则来进行排序的。在java中查找Collections类中的方法,会发现sort方法还有重载的方法,这个方法需要传入一个比较器作为参数,这时排序就是按照定义的比较器的排序规则来进行的了。就像在以下的演示代码中,定义的另一个List型的容器li一样,传入比较器StudentCoparator,它的怕排列顺序就是按照比比较器定义的排序来排列的。

        接下来说一下,shufle方法。这个方法的作用是对List型的容器进行随机排序。简单来说就是洗牌原理,将一副扑克牌进行洗牌操作就是将其其中的牌打乱,进行随机分配。比如在演示代码中对容器li使用shufle方法,这个对它进行遍历,可以发现程序每运行一次它打印出来的顺序都不一定是相同的,也就是随机的。值得说明的一点是,这个方法仍然有重载的方法,重载方法中需要传入一个随机对象,这个对象可以是默认的,也可以是添加了seed的。

        Random(seed)的使用方法如下:

  1. 创建实例:你可以使用给定的seed创建一个Random对象,例如 Random random = new Random(seed);
  2. 生成随机数:一旦有了Random对象,你可以调用其各种方法来生成不同范围的随机整数或浮点数,如nextInt()nextDouble()等。
  3. 设置种子:如果不提供seed,则默认使用系统时间作为种子,如果程序需要保证每次运行生成的随机数序列一致,可以明确指定seed值。

上面的这个描述可能比较抽象, 难点在于理解seed的作用。这里可以这样理解,如果我同时创建了两个Random对象,如果构造方法中的seed的值是一样的,那么这两个对象产生的随机数列也是一样的,这就是seed的作用。

package com.container.demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class CollectionsTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("c");
        list.add("b");
        list.add("d");
        list.add("a");
        for (String str:list
             ) {
            System.out.println(str);
        }
        System.out.println("_________________________");
        //通过Collections类进行排序
        Collections.sort(list);
        for (String str:list
             ) {
            System.out.println(str);
        }
        System.out.println("______________________________");
        List<Student> li = new ArrayList<>();
        Student s1 = new Student ("linyi",20);
        Student s2 = new Student("linling",21);
        Student s3 = new Student("liner",21);
        li.add(s1);
        li.add(s2);
        li.add(s3);
        for (Student stu:li
             ) {
            System.out.println(stu);
        }
        System.out.println("________________________");
        Collections.sort(li,new StudentComparator());
        for (Student stu:li
             ) {
            System.out.println(stu);
        }
        System.out.println("____________________________");
        Collections.shuffle(li);
        for (Student stu:li
             ) {
            System.out.println(stu);
        }
        System.out.println("________________________");
        Collections.shuffle(li,new Random());
        for (Student stu:li
             ) {
            System.out.println(stu);
        }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值