前言
一、Arrays类
- public static String toString(int[] a){} —>将数组变为字符串输出
- public static void fill(int[] a, int val) {} —>对数组进行填充
- public static boolean equals(int[] a, int[] a2){} —>比较两个数组是否相等,按照数组中元素的顺序比较
- public static void sort(int[] a){} —>排序
- public static int binarySearch(int[] a, int key){} —>二分查找,找到返回结果大于0
package 比较器;
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
int data[] = {1,4,3,2,6,9,6};
int data1[] = {1,4,3,2,6,9,6};
int data2[] = new int[5];
Arrays.fill(data2,9);
System.out.println(Arrays.toString(data2));
System.out.println(Arrays.equals(data,data1));
Arrays.sort(data);
System.out.println(Arrays.equals(data,data1));
System.out.println(Arrays.binarySearch(data,2));
}
}
二、Comparable与Comparator
- Comparable:对象数组进行比较排序时,需要确定一个排序规则,比如按照书的价格进行排序,因此需要覆写泛型接口Comparable中的compareTo()方法【由Arrays.sort()方法自动调用】
package 比较器;
import java.util.Arrays;
class Book implements Comparable<Book>
{
private String title;
private int price;
public Book(String title,int price)
{
this.price = price;
this.title = title;
}
@Override
public String toString() {
return "书名:"+this.title+"价格:"+this.price+"\n";
}
@Override
public int compareTo(Book o) {
if(this.price > o.price) return 1;
else if (this.price < o.price) return -1;
else return 0;
}
}
public class ComparableDemo {
public static void main(String[] args) {
Book []books = new Book[]{
new Book("计算机组成原理",90),
new Book("操作系统",80),
new Book("数据结构",70),
new Book("计算机网络",60)
};
Arrays.sort(books);
System.out.println(Arrays.toString(books));
}
}
- Comparator:对一个不便于更改的类的对象数组进行排序,需要为该类单独定义一个排序类,排序类需要实现Comparator中的compare()方法
package 比较器;
import java.util.Arrays;
import java.util.Comparator;
class Book
{
private String title;
private int price;
public Book(String title,int price)
{
this.setPrice(price);
this.setTitle(title);
}
@Override
public String toString() {
return "书名:"+ this.getTitle() +"价格:"+ this.getPrice() +"\n";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
class BookSort 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;
else return 0;
}
}
public class ComparableDemo {
public static void main(String[] args) {
Book []books = new Book[]{
new Book("计算机组成原理",90),
new Book("操作系统",80),
new Book("数据结构",70),
new Book("计算机网络",60)
};
Arrays.sort(books,new BookSort());
System.out.println(Arrays.toString(books));
}
}
- 比较comparable与comparator的区别
- 如果进行对象数组的排序一定要设置排序规则,可以使用comparable或者comparator
- comparable是在一个类定义的时候需要实现的接口,是为了该类对象的比较,comparable接口下定义了一个比较方法 public int compareTo()方法
- 使用comparator接口,需要为某个类定义一个单独的排序类,并实现比较方法 public int compare()