1. 程式人生 > >Java Comparable排序介面和Comparator比較器介面

Java Comparable排序介面和Comparator比較器介面

       實現Comparable介面的類支援排序,假設現在存在“實現Comparable介面的類的物件的List列表(或陣列)”,則該List列表(或陣列)可以通過 Collections.sort(或 Arrays.sort)進行排序。
       Comparable位於包java.lang下,Comparable是一個物件本身就已經支援自比較所需要實現的介面(如 String、Integer 自己就可以完成比較大小操作),是內部定義的排序Comparator位於包Java.util下,而Comparator在一個獨立的類中實現比較,是外部實現的排序。Comparator 是策略模式(strategy design pattern),就是不改變物件自身,而用一個策略物件(strategy object)來改變它的行為。比如:你想對整數採用絕對值大小來排序,Integer 是不符合要求的,你不需要去修改 Integer 類(實際上你也不能這麼做)去改變它的排序行為,只要使用一個實現了Comparator介面的物件來實現控制它的排序就行了。

1.若一個類要實現Comparable介面:它一定要實現compareTo(T o1, T o2) 函式,但可以不實現 equals(Object obj) 函式。為什麼可以不實現 equals(Object obj) 函式呢? 因為任何類,預設都是已經實現了equals(Object obj)的。 Java中的一切類都是繼承於java.lang.Object,在Object.java中實現了equals(Object obj)函式;所以,其它所有的類也相當於都實現了該函式。compareTo(T o)是“比較本身和o的大小”。返回“負數”,意味著“自身比o小”;返回“零”,意味著“自身等於o”;返回“正數”,意味著“自身大於o”;

2.若一個類要實現Comparator介面:它一定要實現compare(T o1, T o2) 函式,int compare(T o1, T o2) 是“比較o1和o2的大小”。返回“負數”,意味著“o1比o2小”;返回“零”,意味著“o1等於o2”;返回“正數”,意味著“o1大於o2”;

public class ComparablePerson implements Comparable<ComparablePerson>{

	private String name;
	private int 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(ComparablePerson o) {
		//比較Persion物件年齡的大小
		if(this.getAge()>o.getAge()){
			return 1;
		}else if(this.getAge()==o.getAge()){
			return 0;
		}else{
			return -1;
		}
	}
	
	public ComparablePerson(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Persion [name=" + name + ", age=" + age + "]";
	}
	
}

public class ComparatorPerson implements Comparator<ComparablePerson>{

	@Override
	public int compare(ComparablePerson sourcePerson, ComparablePerson destPerson) {
		if(sourcePerson.getName().compareTo(destPerson.getName())>0){
			return 1;
		}else if(sourcePerson.getName().compareTo(destPerson.getName())==0){
			return 0;
		}else{
			return -1;
		}
	}

}

public class TestComparable {

	public static void main(String[] args) {
		
		ComparablePerson aPerson = new ComparablePerson("Tom", 24);
		ComparablePerson bPerson = new ComparablePerson("Lucy", 22);
		ComparablePerson cPerson = new ComparablePerson("Jams", 23);
		ArrayList<ComparablePerson> persons = new ArrayList<ComparablePerson>();
		persons.add(aPerson);
		persons.add(bPerson);
		persons.add(cPerson);
		System.out.println("Original sort\n:"+persons);
	    Collections.sort(persons);
		System.out.println("Asc(age)\n:"+persons);
		Collections.sort(persons, new ComparatorPerson());
		System.out.printf("Asc(name) sort\n:%s\n", persons); 
		
		
	}
}


相關推薦

Java Comparable排序介面Comparator比較介面

       實現Comparable介面的類支援排序,假設現在存在“實現Comparable介面的類的物件的List列表(或陣列)”,則該List列表(或陣列)可以通過 Collections.so

java.util下有一個Comparator(比較)

ack list clas 必須 har ble sort rabl short java.util下有一個Comparator(比較器) 它擁有compare(),用來比較兩個方法。 要生成比較器,則用Sort中Sort(List,List(Compate)) 第二種方法

Comparator比較介面使用原理

java.util.Comparator是比較器介面,如果我們需要控制某個類的次序並且該類本身不支援排序,那麼就可以建立一個類比較器來進行排序,實現方式很簡單隻需要實現java.util.Comparator介面。 java.util.Comparator介面只包括兩個函式

Java中實現Comparable介面Comparator介面排序演算法效率比較

在PAT Basic Level的真題中,有”德才論“這麼一題(點選可開啟題目)。 最開始我是構造了一個學生類,存放學生資訊,實現Comparator介面,遺憾的是,後臺測試時,每一個測試用例皆顯示程式執行超時。 public class Main ... class S

Java中實現物件的比較Comparable介面Comparator介面

在實際應用中,我們往往有需要比較兩個自定義物件大小的地方。而這些自定義物件的比較,就不像簡單的整型資料那麼簡單,它們往往包含有許多的屬性,我們一般都是根據這些屬性對自定義物件進行比較的。所以Java中要比較物件的大小或者要對物件的集合進行排序,需要通過比較這些物件的某些屬性

【轉載】JavaComparableComparator比較

import 比較器 todo itl 復制代碼 ack div array open 【本文轉自】http://www.cnblogs.com/skywang12345/p/3324788.html Comparable 簡介 Comparable 是排序接口。 若一

JavaComparableComparator比較

collect clas bold 數據 let 排序類 height webkit tom 1、Comparable 介紹 Comparable 是一個排序接口,如果一個類實現了該接口,說明該類本身是可以進行排序的。註意,除了基本數據類型(八大基本數據類型) 的數組或

Java中的Comparable介面Comparator介面

介紹Comparable<T>介面和Comparator<T>介面都是JDK中提供的和比較相關的介面。使用它們可以對物件進行比較大小,排序等操作。這算是之後排序的先導知識吧。Comparable, 字面意思是“可以比較的”,所以實現它的類的多個例項應該可以相互比較“大小”或者

java】實現Comparable介面Comparator介面,並重寫compareTo方法compare方法

實現Comparable介面和Comparator介面,並重寫compareTo方法和compare方法 2016年08月11日 14:39:25 蘇尹 閱讀數:10772更多 個人分類: 學習筆記 實體類:java.lang.Comparable(介面) + coma

Comparable介面Comparator介面比較

概述        在實際應用中,我們往往有需要比較兩個自定義物件大小的地方。而這些自定義物件的比較,就不像簡單的整型資料那麼簡單,它們往往包含有許多的屬性,我們一般都是根據這些屬性對自定義物件進行比較的。所以Java中要比較物件的大小或者要對物件的集合進行排序,需要通過比較

集合框架(五)使用Comparable介面Comparator介面比較元素

1、有時希望將元素插入到一個樹集合中個,這些元素可能不是java.lang.Comparable的例項,這時可以定義一個比較器來比較這些元素。即需要建立一個實現java.util.Comparator介面的類。Comparator介面有兩個方法:compare和

Java常用類庫--Arrays、比較comparableComparator

1、Arrays類 Arrays表示陣列的操作類,直接定義在java.util包中 import java.util.* ; public class ArraysDemo{ public st

TreeSet集合排序兩種實現方式ComparableComparator比較

import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; /** * TreeSet集合排序有兩種方式,Comparable和Comparator區別: * 1:

Java中的comparable接口Comparator接口的區別

java tor 舉例 compare 不能 style void doc r+ 一.comparable和Comparator的區別 1、Comparable和Comparator都是用來實現集合中元素的比較、排序的。 2、Comparable是在類內部定義的方法

Java中的Comparable接口Comparator接口

src ignore 原因 vpd 以及 byte 正數 != err 介紹Comparable<T>接口和Comparator<T>接口都是JDK中提供的和比較相關的接口。使用它們可以對對象進行比較大小,排序等操作。這算是之後排序的先導知識吧。

Comparable介面Comparator介面的區別(通俗版)

概述 Comparable和Comparator都是用來實現集合中元素的比較、排序的。 Comparable是在集合內部定義的方法實現的排序,位於java.lang下。 Comparator是在集合外部實現的排序,位於java.util下。 Comparable是一個物件本

Comparator比較的使用,Map排序

專案開發過程中,總會遇到各種沒有遇見過的需求,今天遇到了一個map排序問題。 Map<String,Object> testMap = new HashMap<String,Object>(); KEY 值的規則是這樣的: xx

實現Comparable介面Comparator介面,並重寫compareTo方法compare方法

實體類:java.lang.Comparable(介面) + comareTo(重寫方法),業務排序類 java.util.Comparator(介面) + compare(重寫方法). 這兩個介面我們非常的熟悉,但是 在用的時候會有一些不知道怎麼下手的感覺,現在用案例

javaComparator比較的使用

java中Comparator的使用:對使用者集合進行排序,先按照年齡大小排序,若年齡相等,則按照姓名排序 標籤: <無>public int compare(User u1, User u2) {} 此方法返回一個int型別的資料,但是此int的值只能是

Comparable介面Comparator介面的使用

1、Comparable介面生命了一個比較兩個物件大小的comparaTo()方法。 例如: public class Edge implements Comparable<Edge>{public  int a;public  int b;public int