• java第十九天,Collections集合工具类的使用


    Collections

    Java中集合都实现了Collection接口,那么针对集合一些特定的功能,有没有一个接口或类能够统一的集成一些集合必要的功能呢?当然能。它就是——Collections集合工具类。

    一.常用方法

    它内部方法很有多种,我们常用到的有如下四种方法:

    1 批量添加成员到集合

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

    将所有指定元素添加到指定 collection 中。

    注:从方法参数中我们可以看出,它支持泛型参数。第一个参数可以是指定泛型及其父类,第二个参数是指定泛型的元素数组

    2 打乱集合中元素顺序

    public static void shuffle(List<?> list)

    使用默认随机源对指定列表进行置换。

    public static void shuffle(List<?> list,Random random)

    使用指定的随机源对指定列表进行置换。

    注:从方法参数中可以得知,该函数支持单参数和双参数;其中第二个参数是用来设置随机打乱规则的。

    3 对集合进行排序

    方法(1):

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

    根据元素的自然顺序 对指定列表按升序进行排序。

    注意:如果利用此方法对自定义类的集合进行排序,需要在自定义类中继承

    Comparable<T> 接口

    并且重写

    public int compareTo(O o) 方法

    决定使用类中哪个参数为排序标准,则用哪个参数进行当前对象和参数对象的对比,比如利用对象中的data属性作为比较参考:

    this.data - o.data ===> 升序

    o.data - this.data ===> 降序

    方法(2):

    public static <T extends Comparable<? super T>> void sort(List<T> list, Comparator<? super T> c)

    根据指定比较器产生的顺序对指定列表进行排序。

    注意:如果利用此方法对自定义类进行排序,需要在第二个参数传入

    Comparator 接口的实现类对象

    依据此对象设定的规则排序。

    4.代码:

    Person类代码:

    package com.lanyue.day18;
    
    public class Person {
    
        public int age;
        public String name;
    
        public Person(int age, String name) {
            this.age = age;
            this.name = name;
    
        }
    
    }
    

    Stu类代码:

    package com.lanyue.day18;
    
    public class Stu implements Comparable<Stu> {
    
        public int age;
        public String name;
    
        public Stu(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        @Override
        public int compareTo(Stu o) {
    
            return this.age - o.age;
        }
    }
    

    运行类代码:

    package com.lanyue.day18;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    
    public class CollectionTool {
    
        public static void main(String[] args) {
    
            ArrayList<Stu> listOne = new ArrayList<>();
            Stu[] stus = {new Stu(20,"逍遥"),new Stu(18,"蓝月"),new Stu(25,"天行")};
    
            Collections.addAll(listOne,stus);
            Collections.sort(listOne);
    
            Iterator<Stu> itOne = listOne.iterator();
            while(itOne.hasNext()){
    
                Stu stu = itOne.next();
                System.out.println(stu.age + ":" + stu.name);
            }
    
            ArrayList<Person> listTwo = new ArrayList<>();
            Person[] peoples = {new Person(30,"小红"),new Person(50,"小李"),new Person(40,"小赵")};
            Collections.addAll(listTwo,peoples);
    
            Collections.sort(listTwo, new Comparator<Person>() {
                @Override
                public int compare(Person o1, Person o2) {
                    return o1.age - o2.age;
                }
            });
    
            Iterator<Person> itTwo = listTwo.iterator();
            while(itTwo.hasNext()){
    
                Person person = itTwo.next();
                System.out.println(person.age + ":" + person.name);
            }
    
        }
    }
    

    程序截图:

  • 相关阅读:
    DHCP原理和配置
    汇编学习1--寄存器学习
    关于ZF2中一点感悟,service_manager
    PHP太怪了,in_array() ,strpos,
    MySql中的skip-name-resovle
    好几天没有写随笔了,今天打开了,随便留点什么吧
    今天是第二次登录,随便写点东西
    我的博客开通了.....,以前也开通了博客,但从来都没有写过,从今天起,希望自己能坚持下去,不断的积累自己技术水平
    luogu 1258 小车问题 小学奥数(?)
    luogu 3406 海底高铁 前缀和
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700530.html
Copyright © 2020-2023  润新知