第30讲 Arrays数组操作工具类

简述

Arrays 类是一个工具类,该类包含用于操作数组的各种方法(如排序和搜索)

导包:java.util.Arrays

成员方法

方法名说明
static String toString(Xxx[] a)将指定数组的内容拼接成字符串表示形式。
static void sort(int[] a)按照默认规则排列指定的数组。
static void sort(int[] a, 规则)按照指定规则排列指定的数组。(引用数据类型数组)
static int binarySearch(Xxx[] a, Xxx e)二分法查找元素e,数组中数据必须升序排列
static int[] copyOf(原数组, 新数组长度)拷贝数组,会根据第二个参数创建新数组
static int[] copyOfRange(原数组, int start, int end)拷贝数组中的指定范围[start, end)
static void fill(数组, 填充元素)用指定元素填充数组

方法binarySearch(Xxx[] a, Xxx e)注意:

​ 1.如果要查找的元素是存在的,就返回元素所在的索引。

​ 2.如果要查找的元素不存在,则返回 -插入点 - 1
插入点: 如果要插入这个不存在的元素,它应该在升序数组中的位置。如在数组int[] a = {1, 2, 3, 4}中查找 6。很明显找不到,该函数会返回 -4 - 1 即 -5 。

- 1的目的: 如果在上述数组a中查找0,是找不到的。如果不额外 -1,返回值就是 -0 ,不够直观,所以Java底层采用 -1

方法copyOf(原数组, 新数组长度)注意:

​ 新数组长度newlength,原数组长度oldlength。

​ newlength < oldlength 会对原数组进行截取;

​ newlength = oldlength 原样拷贝

​ newlength > oldlength 会用元素0进行填充

  • 方法sort(int[] a)sort(int[] a, 规则)指定排序规则代码演示:
import java.util.Arrays;
import java.util.Comparator;

public class sortDemo {
    public static void main(String[] args) {
        Integer[] arr = {4, 5, 1, 8, 6, 34, 52, 33, 9, 23};

        //默认排序规则:升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr)); //[1, 4, 5, 6, 8, 9, 23, 33, 34, 52]

        //指定为降序
        //引用数据类型数组才能指定。
        //第二个参数是一个接口,需要传递接口的实现类对象。
        /*
            该方法的底层实现:二分查找,插入排序。
            认为0号索引元素是有序的,1~末尾都是无序的。
            遍历无序序列,利用二分查找确定无序序列元素的插入点,再用无序序列元素与插入点元素比较。
            比较的规则就是compare方法:
            如果方法返回值 >= 0 ,则无序序列元素继续与插入点后面的元素比较;
            如果方法返回值 <  0 ,则无序序列元素继续与插入点前面的元素比较。


            compare(Integer o1, Integer o2)
            o1 -> 无序序列中遍历得到的元素
            o2 -> 有序序列中的元素
         */

        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });

        System.out.println(Arrays.toString(arr)); //[52, 34, 33, 23, 9, 8, 6, 5, 4, 1]
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值