Java学习记录之Collections的工具类

首先大家要注意一下,此篇文章是关于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;
     }
   });
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值