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  List  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(x+y));

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

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

ArrayList

你可能感兴趣的:(java刷题必会的基础技巧,java,算法,数据结构)