java刷题利器-数组[Arrays和List]

前言

利用java刷题的时候,数组是最常见,也是变化最多样的数据结构。在java中可以利用数组或者List列表来对数组元素进行处理,通常来说一维数组是数组中最多的。我们要学会一维和多维数组的处理方法,这样在刷题过程中才能更加的得心应手。

Arrays

在java中,如果没有特别说明不允许使用Arrays类,那么Arrays类就是一个大Bug,借助这个Bug,可以帮我们快速处理很多简单的算法题,排序、查找、复制等操作,都能通过Arrays来完成。

  • JDK API:https://docs.oracle.com/javase/8/docs/api/index.html

Arrays类位于java.util.Arrays, 其中包含很多静态方法,可以直接调用。

  • 官方描述:

此类包含用于操作数组的各种方法(例如排序和搜索)。此类还包含一个静态工厂,允许将数组视为列表。
如果指定的数组引用为null,则此类中的方法都会引发NullPointerException,除非另有说明。
此类中包含的方法的文档包括对实现的简要描述。此类描述应视为实施说明,而不是规范的一部分。只要遵守规范本身,实现者就可以随意替换其他算法。(例如,sort(Object[])使用的算法不必是MergeSort,但必须是稳定的。)

下面是常用方法:

//通过指定类型返回固定大小的List
static <T> List<T>  asList(T... a) 
 //二分查找,返回下标
 // 必须是排好序的数组,否则可能返回错误的值。
static int binarySearch(Object[] objArr, int from, int to, Object obj).
//以int为例
//拷贝数组,制定拷贝的长度
static int[] copyOf(int[] ar, int newLength) 
//拷贝固定长度的数组
static int[] copyOfRange(int[] ar, int from, int to)
//常用的比较
//比较是否相等,若是多维,用deepEquals
static boolean equals(double[] a, double[] b)
//填充数组元素,以int为例,注意哪些方法是void
static void fill(int[] ar, int fromIndex, int toIndex, int val)
// IntBinaryOperator: (left, right)->((left+right) - left)
// 利用制定操作函数对当前元素进行操作,left是当前元素左边的元素,第一个元素左边为1,right为当前元素
static void parallelPrefix(int[] array, IntBinaryOperator op)
// 对每个元素做点什么
static void parallelSetAll(int[] ar, IntUnaryOperator generator)

static void setAll(int[] ar, IntUnaryOperator generator)
//并行排序
static void parallelSort(int[] ar, int fromIndex, int toIndex)
// 排序
static void sort(int[] ar, int fromIndex, int toIndex)
//返回数组的字符串形式
static String toString(int[] ar)
  • 简单样例
import java.util.*;

public class TestArrays {
    public static void main(String[] args){
        Random random = new Random();
        int len = random.nextInt(999);
        int[] ar = new int[len];
        // 生成随机数组
        for(int i=0; i<len; i++){
            ar[i] = random.nextInt(999);
        }
        // toString方法
        System.out.println(Arrays.toString(ar));

        // 排序
        //Arrays.sort(ar);
        Arrays.parallelSort(ar);
        System.out.println(Arrays.toString(ar));

        // 二分查找
        int result = Arrays.binarySearch(ar, 100);
        System.out.println(result);

        // 利用lambda函数填充每个元素填充
        Arrays.parallelPrefix(ar, (x, y)->(x+y));

        // 遍历每一个元素
        Arrays.parallelSetAll(ar, (x)->{return x*100 + 5;});

    }
}
  • 说明
    主要需要掌握的是sort和search这两个,因为查找和排序是数组中常考的内容,掌握了那么排序和查找就很简单了。

ArrayList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值