Comparator接口的使用

一個人如果沒有夢想,跟無憂無慮有什麼區別呢?

Exchanger 的使用

Semaphore的使用

今天來給大家介紹下java.utils包下的Comparator接口。該接口代表一個比較器,java數組工具類和集合工具類中提供對sort方法排序就是使用Comparator接口來處理排序的。

Comparator接口中有一個方法int compare(T o1, T o2)。這個方法返回值是int類型,如果返回值小於0,說明比較結果是o1o2。

既然是接口,那麼我們就可以實現它,來自定義其中對比較規則,即可實現在一個List列表中將元素按照某個屬性進行排序。

下面我們用代碼舉例說明,如下:

package com.java.utils.Comparator;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
/**
* 類說明:
*	比較器Comparator接口的應用
*/
public class ComparatorTest {
	
	/**
	 * 實體對象類 
	 */
	static class User {
		String name;
		int age;
		public User(String name,int age) {
			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;
		}
		
	}
	
	/**
	 * 自定義比較器
	 * 根據名稱比較
	 */
	static class MyComparatorName implements Comparator{
		@Override
		public int compare(User u1, User u2) {
			return u1.getName().compareTo(u2.getName()) * -1;
		}
	}
	
	/**
	 * 自定義比較器
	 * 根據年齡比較
	 */
	static class MyComparatorAge implements Comparator{
		@Override
		public int compare(User u1, User u2) {
			return (u1.getAge() - u2.getAge());
		}
	}
	
	//測試
	public static void main(String[] args) {
		List list =new ArrayList();
		User u1 = new User("a", 2);
		User u2 = new User("d", 0);
		User u3 = new User("c", 3);
		list.add(u1);
		list.add(u2);
		list.add(u3);
		
		Collections.sort(list, new MyComparatorName());
		for(User u :list){
			System.out.println(u.getName());
		}
		
		Collections.sort(list, new MyComparatorAge());
		for(User u :list){
			System.out.println(u.getAge());
		}
	}
	
}

在上面對例子中,我們首先按照名稱從大到小進行排序,輸出結果是d、c、a然後又按照年齡從小到大進行排序,輸出結果是0、2、3。

需要注意的是,Collections.sort方法默認是按照返回結果從小到大進行排序,如果我們需要從大到小則在實現比較器大時候將返回結果乘以-1即可。

是不是很簡單?如果是我們自己實現比較器,那麼我們就可以根據實際的業務需求去實現排序。

Comparator接口的使用


分享到:


相關文章: