欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习记录之Collections的工具类

程序员文章站 2024-01-14 22:51:28
...

首先大家要注意一下,此篇文章是关于Collections工具类,区别于前面写过的Collection集合那一章。

java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:
public static boolean addAll(Collection c,T…elements) :往集合中添加一些元素
public static void shuffle(List<?> list) 打乱顺序,打乱集合顺序

import java.util.Collections;
import java.util.ArrayList;

public class DemoCollections{
   public static void main(String[] args){
     ArrayList<String> list = new ArrayList<>();
     //往集合中添加多个元素
     list.add("aaa");
     list.add("bbb");

     //还可以用addAll方法往集合里添加元素
     //public static <T> boolean addAll(Collection<T> c,T...elements);
     Collections.addAll(list,"aaa","bbb");
   }
}

具体讲一下Collections集合工具类中的sort()方法:
1 public static void sort(List list) :将集合中元素按照默认规则排序
注意:
sort(List list)使用前提
被排序的集合里边存储的元素,必须实现Comparable接口,重写接口中的方法compareTo定义排序的规则
Comparable接口的排序规则:
自己(this)-参数:升序
参数-自己(this):降序

//创建一个Person类
public class Person implements Comparable<Person>{
  private String name;
  private int age;
  public Person(){
  }
  publix Person(String name,int age){
     this.name=name;
     this.age=age;
  }
  @Override
  public String toString(){
     return "Person{"+"name='"+name+'\''+",age="+age+'}';
  }
  public String getName(){
     return name;
  }
  public void setName(String name){
       this.name=name;
  }
  public int getAge(){
     return age;
  }
  public void setAge(int age){
       this.age=age;
  }  

  //重写排序规则
  @Override
  public int compareTo(Person o){
    //return 0;//认为元素都是相同的
    //自定义比较规则,比较两个人的年龄(this,参数Person)
    return this.getAge()-o.getAge();//年龄升序排序
  }
}
//主程序
import java.util.Collections;
public class Demo02Sort{
  public static void main(Sting[] args){
//public static <T> void sort(List<T> list) :将集合中元素按照默认顺序排序
     ArrayList<Integer> list01 = new ArrayList<>();
     //添加元素
     list01.add(1);
     list01.add(3);
     list01.add(2);
     System.out.println(list01);//[1,3,2]
     
     //用sort方法让其按照默认方法排序
     Collections.sort(list01);
     System.out.println(list01);//[1,2,3]

     ArrayList<String> list02 = new ArrayList<>();
     list02.add("a");
     list02.add("c");
     list02.add("b");
     System.out.println(list02);//[a,c,b]
     Collections.sort(list02);//[a,b,c]

     ArrayList<Person> list03 = new ArrayList<>();
     Person p1 = new Person("张三"18);
     Person p2 = new Person("李四"20);
     Person p3 = new Person("王五"15);
     System.out.println(list03);//[Person{name='张三',age=18},Person{name='李四',age=20},Person{name='王五',age=15}]  因为重写了toString方法,所以打印ArrayList集合的对象才不会是地址值
     Collections.sort(list03);//若是不实现Comparable接口,重写compareTo方法,就无法排序,就会报错
     
   }
}

2.public static void sort(List list,Comparator<? super T>) :将集合中元素按照指定的规则排列
Comparator和Comparable的区别
Comparable :自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
Comparator :相当于找一个第三方的裁判,比较两个
Comparator的排序规则;
o1-o2 :升序,
o2-o1 :降序

//创建一个Student类
public class Student{
   private String name;
   private int age;

   public Student{
   }
   public Student(String name,int age){
       this.name=name;
       this,age=age;
   }
   @Override
  public String toString(){
     return "Person{"+"name='"+name+'\''+",age="+age+'}';
  }
   public String getName(){
     return name;
  }
  public void setName(String name){
       this.name=name;
  }
   public int getAge(){
     return age;
  }
  public void setAge(int age){
       this.age=age;
  }
}
//主程序
import java.util.Collections;
**import java.util.Comparator**;//别忘记

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);//[3,2,1]

     ArrayList<Student> list02 = new ArrayList<>();
     list02.add(new Student("迪丽热巴"18));
     list02.add(new Student("古力娜扎"20));
     list02.add(new Student("杨幂"17));
     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().chart(0)-o2.getName.chartAt(0);
               }
               return result;
     }
   });
}