zoukankan      html  css  js  c++  java
  • Java之comparable接口

    comparable 接口:

      1. 问题:java.util.Collections 类中的方法 Collections.sort(List list) 是根据什么确定容器中对象的“大小”顺序的?

      2. java 中所有可以“排序”的类都实现了 java.lang.comparable 接口,Comparable 接口中只有一个方法:

        public int  compareTo(Object obj):在该方法中,

        返回   0, 表示 this == obj;

        返回 正数,表示 this > obj;

              返回 负数,表示 this < obj;

      3. 实现了 comparable 接口的类通过实现 compareTo 方法从而确定该对象的排序方式.

    Demo_1:

    class MyName implements Comparable<MyName>{
    	private int age;
    	public MyName(int age) {
    		this.age = age;
    	}
    
    	@Override
    	public int compareTo(MyName mn) {
    		if(this.age>mn.age){
    			return 1;
    		}else if(this.age<mn.age){
    			return -1;
    		}else {
    			return 0;
    		}
    	}
    }
    public class Test {
    	public static void main(String[] args) {
    		MyName m1 = new MyName(12);
    		MyName m2 = new MyName(25);
    		System.out.println(m1.compareTo(m2)); // 输出:-1
    	}
    }
    

     Demo_2:

    import java.util.*;
    class Name implements Comparable<Name>{
    	private String firstName, lastName;
    	public Name(String firstName, String lastName) {
    		this.firstName = firstName;
    		this.lastName = lastName;
    	}
    	public String getFirstName(){
    		return firstName;
    	}
    	public String getLastName(){
    		return lastName;
    	}
    	@Override
    	public String toString() {
    		return firstName+" "+lastName;
    	}
    	@Override
    	public boolean equals(Object obj) {
    		if(obj instanceof Name){
    			Name name = (Name)obj;
    			return (getFirstName().equals(name.firstName)) && (getLastName().equals(name.lastName));
    		}
    		return super.equals(obj);
    	}
    	@Override
    	public int hashCode() {
    		return firstName.hashCode();
    	}
    	public int compareTo(Name objj) {
    		int cmpResult = lastName.compareTo(objj.lastName);
    		return  cmpResult !=0 ? cmpResult:firstName.compareTo(firstName);
    	}
    }
    class Test {
    	public static void main(String[] args) {
    		LinkedList<Name> ln = new LinkedList<Name>();
    		ln.add(new Name("song","bo"));
    		ln.add(new Name("song","qi"));
    		ln.add(new Name("song","ting"));
    		ln.add(new Name("liu","bo"));
    		ln.add(new Name("fang","qi"));
    		ln.add(new Name("shang","qi"));
    		ln.add(new Name("zhu","ting"));
    		System.out.println(ln); // 输出:
    		Collections.sort(ln);
    		System.out.println(ln); // 输出:
    	}
    }
    // 第1次输出: [song bo, song qi, song ting, liu bo, fang qi, shang qi, zhu ting]
    // 第2次输出: [song bo, liu bo, song qi, fang qi, shang qi, song ting, zhu ting] 
    

      

  • 相关阅读:
    小程序 图片和文字放在一行对齐的方法
    Linux下Redis安装使用教程
    关系型数据库和非关系型数据库的区别
    微信小程序scroll-view 横向和纵向scroll-view组件
    ThinkPHP5.0手把手实现手机阿里云短信验证
    极验(Geetest) Laravel 5 集成开发包,让验证更安全
    (进阶篇)PHP(thinkphp5框架)实现用户注册后邮箱验证,激活帐号
    详解PhpSpreadsheet设置单元格
    使用PhpSpreadsheet将Excel导入到MySQL数据库
    【JZOJ4783】【NOIP2016提高A组模拟9.15】Osu
  • 原文地址:https://www.cnblogs.com/bosongokay/p/6771074.html
Copyright © 2011-2022 走看看