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 是需要单独定义一个比较规则,属于挽救功能的操作。

猜你喜欢

转载自blog.csdn.net/sinat_18882775/article/details/51519894
今日推荐