zoukankan      html  css  js  c++  java
  • 【Java__比较】Comparable 和 Comparator的区别

    区别

    • comparable接口实际上是出自java.lang包 它有一个compareTo(Object obj)方法用来排序
    • comparator接口实际上是出自java.util包 它有一个compare(Object obj1,Object obj2)方法用来排序

    Comparator定制排序

    	ArrayList<Integer> arrayList = new ArrayList<Integer>();
    	arrayList.add(-1);
    	arrayList.add(3);
    	arrayList.add(3);
    	arrayList.add(-5);
    	arrayList.add(7);
    	arrayList.add(4);
    	arrayList.add(-9);
    	arrayList.add(-7);
    	System.out.println("原始数组:");
    	System.out.println(arrayList);
    	// void reverse(List list):反转
    	Collections.reverse(arrayList);
    	System.out.println("Collections.reverse(arrayList):");
    	System.out.println(arrayList);
    	// void sort(List list),按⾃然排序的升序排序
    	Collections.sort(arrayList);
    	System.out.println("Collections.sort(arrayList):");
    	System.out.println(arrayList);
    	// 定制排序的⽤法
    	Collections.sort(arrayList, new Comparator<Integer>() {
    		@Override
    		public int compare(Integer o1, Integer o2) {
    			return o2.compareTo(o1);
    		}
    	});
    	System.out.println("定制排序后:");
    	System.out.println(arrayList);
    

    重写compareTo⽅法实现按年龄来排序

    package po;
    
    //person对象没有实现Comparable接⼝,所以必须实现,这样才不会出错,才可以使treemap中的数据按顺序排列
    //前⾯⼀个例⼦的String类已经默认实现了Comparable接⼝,详细可以查看String类的API⽂档,另外其他
    //像Integer类等都已经实现了Comparable接⼝,所以不需要另外实现了
    public class Person implements Comparable<Person> {
    	private String name;
    	private int age;
    
    	public Person(String name, int age) {
    		super();
    		this.name = name;
    		this.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;
    	}
    
    	/**
    	 * TODO重写compareTo⽅法实现按年龄来排序
    	 */
    	@Override
    	public int compareTo(Person o) {
    		// TODO Auto-generated method stub
    		if (this.age > o.getAge()) {
    			return 1;
    		} else if (this.age < o.getAge()) {
    			return -1;
    		}
    		return age;
    	}
    }
    
    	public static void main(String[] args) throws Exception {
    		TreeMap<Person, String> pdata = new TreeMap<Person, String>();
    		pdata.put(new Person("张三", 30), "zhangsan");
    		pdata.put(new Person("李四", 20), "lisi");
    		pdata.put(new Person("王五", 10), "wangwu");
    		pdata.put(new Person("小红", 5), "xiaohong");
    		// 得到key的值的同时得到key所对应的值
    		Set<Person> keys = pdata.keySet();
    		for (Person key : keys) {
    			System.out.println(key.getAge() + "-" + key.getName());
    		}
    	}
    

    摘自 JavaGuide

  • 相关阅读:
    Mooncake (排序+贪心)
    The Black Hole of Numbers (strtoint+inttostr+sort)
    随机排序
    EF 随机排序
    禁用DropDownList的Items
    sql之left join、right join、inner join的区别
    SQL优化-索引
    .net 面试问题 汇总
    从简单的例子理解泛型
    1.1 使用内置的Camera应用程序捕获图像
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/13293903.html
Copyright © 2011-2022 走看看