Arrays源码解析

本文深入探讨了Java中的Arrays类,包括使用Comparator进行自定义排序、计算哈希值的方法、toString的实现、数组拷贝的细节以及二分查找和排序算法的原理。对于基本类型和对象类型数组,文章分析了不同的排序算法,如双枢轴快速排序和TimSort,并解释了为何选择不同算法的原因。
摘要由CSDN通过智能技术生成

参考:Java编程的逻辑

Arrays

类Arrays包含一些对数组操作的静态方法

数组排序 - 自定义比较器

sort可以接受一个比较器作为参数

public static <T> void sort(T[] a, Comparator<? super T> c)
public static <T> void sort(T[] a, int fromIndex, int toIndex,
                                Comparator<? super T> c)

这个方法可以支持所有对象类型,只要传递这个类型对应的比较器就可以了。
Comparator就是比较器,它是一个接口,定义是:

public interface Comparator<T> {
   
    int compare(T o1, T o2);
    boolean equals(Object obj);
}

最主要的是compare这个方法,它比较两个对象,返回一个表示比较结果的值,-1表示o1小于o2,0表示相等,1表示o1大于o2。

排序是通过比较来实现的,sort方法在排序的过程中,需要对对象进行比较的时候,就调用比较器的compare方法。

String类有一个public静态成员,表示忽略大小写的比较器:

public static final Comparator<String> CASE_INSENSITIVE_ORDER
                                     = new CaseInsensitiveComparator();
private static class CaseInsensitiveComparator implements Comparator<String> {
   
    public int compare(String s1, String s2) {
   
        int n1 = s1.length();
        int n2 = s2.length();
        int min = Math.min(n1, n2);
        for (int i = 0; i < min; i++) {
   
            char c1 = s1.charAt(i);
            char c2 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值