Java基礎回顧 : Arrays類和Comparator接口

一 、 java.util.Arrays 類是一個專門提供數組操作的支持類 .

① . public static boolean equals(數組1,數組2) ;   兩個數組彼此相等,就返回true .

② . public static void sort(int[] a) . 對數組元素進行排序. 除此之外還有其他的重載方法.

③ . public static void sort(Object[] a) .根據元素的自然順序對指定對象數組按升序進行排序。數組中的所有元素都必須實現 Comparable 接口。

eg : 

package example;

import java.util.Arrays;
import java.util.Comparator;

class Book implements Comparable<Book>{
	private String title;
	private double price;
	
	public Book() {
	}
	
	public Book(String title,double price){
		this.title = title;
		this.price = price;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	@Override
	public int compareTo(Book o) {
		if(this.price > o.price){
			return 1;
		} else if(this.price < o.price) {
			return -1;
		}
		return 0;
	}
	
	@Override
	public String toString() {
		return "書名 : " + this.title + " ,價格 : " + this.price + "\n";
	}
	
}

public class TestDemo {
	public static void main(String[] args) throws Exception {
		Book b1 = new Book("天龍八部",10);
		Book b2 = new Book("西遊記",30);
		Book b3 = new Book("射鵰英雄傳",20);
		
		Book books[] = new Book[]{b1,b2,b3};
		Arrays.sort(books);
		System.out.println(Arrays.toString(books));
	}
}


上面的情況要求Comparable 必須在一個類定義的時候就將其實現完整,但是在實際的開發之中也會出現這樣的一種情況:一個類已經開發完成了,並且這個類不能修改了。但是現在突然有了新的要求是:可以進行排序。爲了解決這樣的問題,在Java 裏面又提供了一個新的接口:java.util.Comparator 接口。

eg :

package example;

import java.util.Arrays;
import java.util.Comparator;

class Book{
	private String title;
	private double price;
	
	public Book() {
	}
	
	public Book(String title,double price){
		this.title = title;
		this.price = price;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}
	
	@Override
	public String toString() {
		return "書名 : " + this.title + " ,價格 : " + this.price + "\n";
	}
	
}

//比較器接口是用來作補救的,如果現有的代碼不能改變了,後來又想加入能進行比較的功能
class BookComparator implements Comparator<Book> {

	@Override
	public int compare(Book o1, Book o2) {
		if(o1.getPrice() > o2.getPrice()) {
			return 1;
		} else if (o1.getPrice() < o2.getPrice()){
			return -1;
		}
		return 0;
	}
	
}

public class TestDemo {
	public static void main(String[] args) throws Exception {
		Book b1 = new Book("天龍八部",10);
		Book b2 = new Book("西遊記",30);
		Book b3 = new Book("射鵰英雄傳",20);
		
		Book books[] = new Book[]{b1,b2,b3};
		Arrays.sort(books, new BookComparator());
		System.out.println(Arrays.toString(books));
	}
}

★ . 關於Comparable 和Comparator 的區別?
· java.lang.Comparable 是在類定義的時候默認實現好的接口,裏面只有一個compareTo()方法;
· java.util.Comparator 是需要單獨定義一個比較規則,屬於挽救功能的操作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章