JAVA进阶(比较器)


前言


一、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) {
    // Arrays.sort()会自动调用这个方法
        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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值