首页 > 编程语言 >Java比较器

Java比较器

时间:2022-11-13 20:44:49浏览次数:47  
标签:Java name age list 比较 User sex public

一、Comparable接口

类直接实现Comparable接口,并实现compareTo方法

package cn.lxx.test;
 
public class User implements Comparable<User> {   //该类实现Comparable接口,参数为User
    private String name;
    private int age;
    private boolean sex;
 
    public User() {
    }
 
    public User(String name, int age, boolean sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
 
    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;
    }
 
    public boolean isSex() {
        return sex;
    }
 
    public void setSex(boolean sex) {
        this.sex = sex;
    }
 
    /**
     * 重写compareTo方法,实现年龄升序,年龄相同则姓名升序
     **/
    @Override
    public int compareTo(User user) {
        if (this.age == user.age) return this.name.compareTo(user.name);
        return this.age - user.age; //将this想像成一排不变的对象(已经按照要求排好序的),而User就是当前要插入的对象,只有user属性小于this属性才插入从而升序,个人理解,希望有所帮助
    }
}
 
class Test {
    public static void main(String[] args) {
        User user1 = new User("ake", 25, true);
        User user2 = new User("reo", 24, false);
        User user3 = new User("fg", 24, false);
        List<User> list = new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        Collections.sort(list);
        System.out.println("Comparable:" + list);
    }
}

二、Comparator接口

两种方式:一种是类直接实现接口,并实现compare方法(不推荐,强耦合);另一种是匿名内部类实现接口,并实现compare方法。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
public class User implements Comparator<User> {
    private String name;
    private int age;
    private boolean sex;
 
    public User() {
    }
 
    public User(String name, int age, boolean sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
 
    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;
    }
 
    public boolean isSex() {
        return sex;
    }
 
    public void setSex(boolean sex) {
        this.sex = sex;
    }
 
    @Override
    public int compare(User o1, User o2) {
        return o1.age-o2.age;
    }
}
class Test{
    public static void main(String[] args) {
        User user1=new User("dingli",25,true);
        User user2=new User("huxiaojuan",24,false);
        User user3=new User("xxx",24,false);
        List<User> list=new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        list.add(user3);

      	// 方式1:
        Collections.sort(list, new User()); //类实现了的Comparator能满足需求
        System.out.println("类自身实现Comparator:"+list);

        // 方式2:
				Collections.sort(list, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                return o1.getName().compareTo(o2.getName()); //按照名字升序
            }
        });
        System.out.println("匿名内部类方式:"+list);

    }
}

三、比较两个接口

Comparable是内比较器,Comparator是外比较器。即实现Comparable接口的类,具备对象之间的直接比较;实现Comparator接口的类,不具备对象之间的直接比较。

image.png

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

标签:Java,name,age,list,比较,User,sex,public
From: https://www.cnblogs.com/wanglei5205/p/16886879.html

相关文章

  • Java 使用JavaMail通过Gmail发送电子邮件
    JavaMail提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API可以方便地执行一些常用的邮件传输。可以基于JavaMail开发出类似于MicrosoftOutlook......
  • Java安全之Mojarra JSF反序列化
    Java安全之MojarraJSF反序列化AboutJSFJavaServerFaces,新一代的JavaWeb应用技术标准,吸收了很多JavaServlet以及其他的Web应用框架的特性。JSF为Web应用开发定义了一......
  • 学习Java前的快捷键和软件配置
    目标熟练掌握java每天编写一篇笔记java和python都要学习每天最少要学习4个视频电脑的快捷键ctrl+c复制ctrl+v粘贴ctrl+a全选ctrl+x剪切ctrl+z......
  • java集合
    Java集合分类数据结构一:集合框架的概述1.集合、数组都是对多个数据进行存储的结构简称java容器说明:此时的存储,主要还是内存层面的存储,不涉及持久化存储(数据库、硬......
  • Java数组工具类Arrays
    Arrays所在的包是Java.util.*,Arrays提供的全部是static方法。1.转字符串1.1一维数组--publicstaticStringtoString(int[]a)参数即可以是基础类型数组,也可以是包装......
  • idea将java项目打成jar包并使用
    1.首先编写一个工具类2.进行打包操作)3.Build之后在项目的out包下面就出现了一个jar包在新建一个项目新建lib文件夹将jar包放进去4.最后即可调用......
  • Java自学,要有技巧的学
    学习Java是有一定技巧和方法的,钻牛角尖的去学习它,只能让你感觉到费神费力,最终陷入到无穷无尽的细枝末节之中。然后渐渐的消磨掉你的耐心,直到你放弃。  学习的过程都是......
  • JavaScriptの类型
    前言此篇小结来源与《你不知道的JavaScript》和《JavaScript高级程序设计》的结合??或许是的,龟速总结中...七种内置类型nullundefinedbooleannumberstringobjectsy......
  • day2 java基础语法
    day1复习1.java的特点  2.jdk,jre,jvm的关系  3.为什么要配置path 基本语法1.关键字与保留字    2.标识符与标识符规则  3.java的命名规范 ......
  • java.方法.learn
    1.方法:什么是方法,方法的格式,方法的好处  2.方法的格式:把一些代码打包在一起,用到的时候就调用 一:最简单方法定义和调用:  二:带参数的方法调用:    形......