zoukankan      html  css  js  c++  java
  • collection 之 LIst Set

    栈:先进后出       队列:先进先出

    list:ArrayList  LinkList

     

     LinkList  链表结构

     

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

    Set

    HashSet   LinkHashSet

    hashset   :不重复存储    不是tostring  而是  hashcode

     

    存储实例

     

    @Override
    public boolean equals(Object o) {
    if (this == o)
    return true;
    if (o == null || getClass() != o.getClass())
    return false;
    Student student = (Student) o;
    return age == student.age &&
    Objects.equals(name, student.name);
    }
    @Override
    public int hashCode() {
    return Objects.hash(name, age);

     

     

    Collection 

     

    Comparator比较器

    降序

     

     

    package demo04.VarArgs;
    /*
        可变参数:是JDK1.5之后出现的新特性
        使用前提:
            当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数.
        使用格式:定义方法时使用
            修饰符 返回值类型 方法名(数据类型...变量名){}
        可变参数的原理:
            可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数
            传递的参数个数,可以是0个(不传递),1,2...多个
    
     */
    public class Demo01VarArgs {
        public static void main(String[] args) {
            //int i = add();
            //int i = add(10);
            int i = add(10,20);
            //int i = add(10,20,30,40,50,60,70,80,90,100);
            System.out.println(i);
    
            method("abc",5.5,10,1,2,3,4);
        }
    
        /*
            可变参数的注意事项
                1.一个方法的参数列表,只能有一个可变参数
                2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
         */
        /*public static void method(int...a,String...b){
    
        }*/
    
        /*public static void method(String b,double c,int d,int...a){
        }*/
    
        //可变参数的特殊(终极)写法
        public static void method(Object...obj){
    
        }
    
        /*
            定义计算(0-n)整数和的方法
            已知:计算整数的和,数据类型已经确定int
            但是参数的个数不确定,不知道要计算几个整数的和,就可以使用可变参数
            add(); 就会创建一个长度为0的数组, new int[0]
            add(10); 就会创建一个长度为1的数组,存储传递来过的参数 new int[]{10};
            add(10,20); 就会创建一个长度为2的数组,存储传递来过的参数 new int[]{10,20};
            add(10,20,30,40,50,60,70,80,90,100); 就会创建一个长度为2的数组,存储传递来过的参数 new int[]{10,20,30,40,50,60,70,80,90,100};
         */
        public static int add(int...arr){
            //System.out.println(arr);//[I@2ac1fdc4 底层是一个数组
            //System.out.println(arr.length);//0,1,2,10
            //定义一个初始化的变量,记录累加求和
            int sum = 0;
            //遍历数组,获取数组中的每一个元素
            for (int i : arr) {
                //累加求和
                sum += i;
            }
            //把求和结果返回
            return sum;
        }
    
        //定义一个方法,计算三个int类型整数的和
        /*public static int add(int a,int b,int c){
            return a+b+c;
        }*/
    
        //定义一个方法,计算两个int类型整数的和
        /*public static int add(int a,int b){
            return a+b;
        }*/
    }

    collection.sort里面重写comparator 的 compare 方法

    package demo05.Collections;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    /*
        - java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:
            public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。
    
         Comparator和Comparable的区别
            Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
            Comparator:相当于找一个第三方的裁判,比较两个
    
        Comparator的排序规则:
            o1-o2:升序
     */
    public class Demo03Sort {
        public static void main(String[] args) {
            ArrayList<Integer> list01 = new ArrayList<>();
            list01.add(1);
            list01.add(3);
            list01.add(2);
            System.out.println(list01);//[1, 3, 2]
    
            Collections.sort(list01, new Comparator<Integer>() {
                //重写比较的规则
                @Override
                public int compare(Integer o1, Integer o2) {
                    //return o1-o2;//升序
                    return o2-o1;//降序
                }
            });
    
            System.out.println(list01);
    
            ArrayList<Student> list02 = new ArrayList<>();
            list02.add(new Student("a迪丽热巴",18));
            list02.add(new Student("古力娜扎",20));
            list02.add(new Student("杨幂",17));
            list02.add(new Student("b杨幂",18));
            System.out.println(list02);
    
            /*Collections.sort(list02, new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    //按照年龄升序排序
                    return o1.getAge()-o2.getAge();
                }
            });*/
    
            //扩展:了解
            Collections.sort(list02, new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    //按照年龄升序排序
                    int result =  o1.getAge()-o2.getAge();
                    //如果两个人年龄相同,再使用姓名的第一个字比较
                    if(result==0){
                        result =  o1.getName().charAt(0)-o2.getName().charAt(0);
                    }
                    return  result;
                }
    
            });
    
            System.out.println(list02);
        }
    }
  • 相关阅读:
    BZOJ4076 : [Wf2014]Maze Reduction
    XVII Open Cup named after E.V. Pankratiev. Eastern GP, Division 1
    BZOJ4617 : [Wf2016]Spin Doctor
    BZOJ4613 : [Wf2016]Longest Rivers
    BZOJ2587 : [Ceoi2011]Team
    BZOJ4422 : [Cerc2015]Cow Confinement
    BZOJ4437 : [Cerc2015]Looping Labyrinth
    BZOJ4432 : [Cerc2015]Greenhouse Growth
    BZOJ2670 : Almost
    寻找“最好”(4)——不等约束和KKT条件
  • 原文地址:https://www.cnblogs.com/qj696/p/14311083.html
Copyright © 2011-2022 走看看