• JAVA集合四:比较器--类自定义排序


    参考链接:

    HOW2J.CN

    前言

    对于JAVA集合,都能够用集合的工具类Collections 提供的方法:

    1. Collections.sort(List list)
    2. Collections.sort(List list, Comparator c)

    来进行排序。很多时候,集合中存储的不是基本的数据类型,而是我们自己定义的类的对象,我们希望用自己的排序方式对集合中的元素进行排序,我们可以通过让类实现Comparable接口来自定义排序方式,也可以采用创建匿名内部类的做法进行自定义排序

    实现Comparable接口

    1. 让待排序的类继承Comparable接口,并实现compareTo方法(相当于给类提供了排序依据)

      package blog;
      
      /*
       * Student 类
       */
      public class Student implements Comparable<Student>{
      	private String name;
      	private int id;
      	public Student(String name, int id) {
      		this.name = name;
      		this.id = id;
      	}
      	@Override
      	public String toString() {
      		return "Student [name=" + name + ", id=" + id + "]";
      	}
      	//实现对象比较的方法(id从小到大排序)
      	@Override
      	public int compareTo(Student o) {
      		if(id < o.id)
      			return -1;
      		else
      		 return 1;
      	}
      }
      
    2. 直接使用Collections.sort(List list)进行排序

      package blog;
      
      import java.util.ArrayList;
      import java.util.Collections;
      import java.util.List;
      
      public class Main {
          public static void main(String[] args) {
          	List<Student> students = new ArrayList<Student>();
          	students.add(new Student("xsy", 2));
          	students.add(new Student("theory", 1));
          	students.add(new Student("衍射",3));
          	
          	//排序前
          	System.out.println("排序前:");
          	for(Student student : students) {
          		System.out.println(student);
          	}
          	
          	//排序后(按照id从小到大)
          	Collections.sort(students);
          	System.out.println("排序后:");
          	for(Student student : students) {
          		System.out.println(student);
          	}
          }
      }
      

      排序前:
      Student [name=xsy, id=2]
      Student [name=theory, id=1]
      Student [name=衍射, id=3]
      排序后:
      Student [name=theory, id=1]
      Student [name=xsy, id=2]
      Student [name=衍射, id=3]

    JAVA创建匿名内部类

    类不需要继承接口,只需要在排序时重写Comparator的compare方法:

    package blog;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
        	List<Student> students = new ArrayList<Student>();
        	students.add(new Student("xsy", 2));
        	students.add(new Student("theory", 1));
        	students.add(new Student("衍射",3));
        	
        	//排序前
        	System.out.println("排序前:");
        	for(Student student : students) {
        		System.out.println(student);
        	}
        	
        	//排序后(按照id从小到大)-- 重写Comparator的compare方法
        	Collections.sort(students, new Comparator() {
    			@Override
    			public int compare(Object o1, Object o2) {
    				if(o1 instanceof Student && o2 instanceof Student) {
    					Student s1 = (Student)o1;
    					Student s2 = (Student)o2;
    					return s1.getId()-s2.getId();
    				}
    				return 0;
    			}		
    		});
        	System.out.println("排序后:");
        	for(Student student : students) {
        		System.out.println(student);
        	}
        }
    }
    

    运行结果如下:

    排序前:
    Student [name=xsy, id=2]
    Student [name=theory, id=1]
    Student [name=衍射, id=3]
    排序后:
    Student [name=theory, id=1]
    Student [name=xsy, id=2]
    Student [name=衍射, id=3]

  • 相关阅读:
    八.正文处理命令及tar命令
    七.用户.群组及权限的深入讨论
    六.用户.群组和权限
    五.目录,文件的浏览,管理和维护
    四.linux 命令及获取帮助
    计算机的基础知识
    三.linux基本的50条命令
    二.Python的基本数据类型及常用功能
    一.编码的转换和基本的算法
    Linux开机自动挂载Windows分区
  • 原文地址:https://www.cnblogs.com/theory/p/11884319.html
Copyright © 2020-2023  润新知