常用工具类-Arrays

简介: 本文介绍了Java工具类Arrays和Arrays.ArrayList的常用功能,包括数组的打印、创建、比较、排序、检索以及转换为List的方法,以及setAll和parallelSetAll的使用,展示了如何通过这些工具类便捷地操作数组。

数组打印

Arrays提供了toString()方法,可以直接将数组的内容打印出来,极为便捷。

String[] strArr = new String[] {
   "1","2","3"};
System.out.println(strArr); // 直接打印的话,输出的是对象的地址 [Ljava.lang.String;@4eec7777
System.out.println(Arrays.toString(strArr)); // [1, 2, 3]

创建数组

创建数组一共有三种方法:

  1. copyOf() 将指定的数组拷贝指定的元素个数到一个新的数组中
  2. copyOfRange() 将指定的数组从指定的索引开始拷贝指定的元素个数到新数组
  3. fill() 将指定的数据填充的指定的数组中
String[] names = new String[]{
   "一","颗","大","西","瓜"};

// public static <T> T[] copyOf(T[] original, int newLength) 指定拷贝的源数组和数组的长度
String[] copy1 = Arrays.copyOf(names,3); 
String[] copy2 = Arrays.copyOf(names,6);
// 打印输出
System.out.println(Arrays.toString(copy1));// [一, 颗, 大]
System.out.println(Arrays.toString(copy2));// [一, 颗, 大, 西, 瓜, null]


// public static <T> T[] copyOfRange(T[] original, int from, int to)
String[] copy3 =  Arrays.copyOfRange(names,0,3); // 从索引0开始拷贝,然后拷贝三个元素
String[] copy4 = Arrays.copyOfRange(names,1,5); // 从索引1开始拷贝,然后拷贝5个元素
System.out.println(Arrays.toString(copy3)); // [一, 颗, 大]
System.out.println(Arrays.toString(copy4)); // [颗, 大, 西, 瓜]


// fill 填充,将数组列表填充为同一个元素
// public static void fill(Object[] a, Object val)
String[] tempArr = new String[4];
Arrays.fill(tempArr,"小"); 
System.out.println(Arrays.toString(tempArr));// [小, 小, 小, 小]

比较数组

数组直接的比较,使用的是equals()方法
如果两个数组的元素个数顺序内容都相等,则会返回true,否则返回false.

String[] fruits = new String[]{
   "橘子","西瓜","草莓"};
boolean rs1 = Arrays.equals(new String[]{
   "橘子","草莓","西瓜"},fruits);
System.out.println(rs1); // false
boolean rs2 = Arrays.equals(new String[]{
   "橘子","哈密瓜","西瓜"},fruits);
System.out.println(rs2); // false
boolean rs3 = Arrays.equals(new String[]{
   "橘子","西瓜","草莓"},fruits);
System.out.println(rs3); // true

数组排序和检索

数组排序通过sort()方法进行排序,检索的话,Arrays提供了二分查找binarySearch()。
只有先通过Arrays.sort()进行排序之后,才能通过Arrays.binarySearch()进行查找,如果没有排序就去二分查找,则会找不到。

// 1.排序
String[] sortArr = new String[]{
   "zhangsan","lisi","wangwu"};
Arrays.sort(sortArr);
System.out.println(Arrays.toString(sortArr)); // [lisi, wangwu, zhangsan]
// 2.检索
int index1 = Arrays.binarySearch(sortArr, "abc");
int index2 = Arrays.binarySearch(sortArr, "zhangsan");
System.out.println(index1); // -1 表示没有找到
System.out.println(index2); // 2 找到了,在数组的索引为2的位置

数组转List

尽管数组非常强大,但它自身可以操作的工具方法很少,比如说判断数组中是否包含某个值。如果能转成 List 的话,就简便多了,集合框架中封装许多灵活简便的方法。
Arrays.asList()即可将数组转换为集合。
源码:


public static <T> List<T> asList(T... a) {
   
    return new ArrayList<>(a);
}

image.png
这里需要注意的是,asList()方法返回的是 java.util.Arrays.ArrayList 这个ArrayList ( 它的长度是固定的,无法进行元素的删除或者添加)并不是我们集合框架中的那个ArrayList,集合框架中的ArrayList是 java.util.ArrayList , 所以当我们想获得集合中的ArrayList时,强转一下。

String[] strArr = new String[] {
   "1","2","3"};
List<String> list = Arrays.asList(strArr);
System.out.println(list);// [1, 2, 3]

setAll 和 parallelSetAll

setAll()方法 对数组元素进行填充

setAll 源码:

public static <T> void setAll(T[] array, IntFunction<? extends T> generator) {
   
    Objects.requireNonNull(generator);
    for (int i = 0; i < array.length; i++)
        array[i] = generator.apply(i);
}

示例:setAll 的使用

int[] numbers = new int[10];
// 每个元素 = 元素索引 * 10
Arrays.setAll(numbers,(i)->{
   
    return i *=10;
});
// 上面代码更为简单的写法  Arrays.setAll(numbers,i->i*10);
System.out.println(Arrays.toString(numbers)); // [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

parallelPrefix() 方法,提供了一个函数式编程的入口,通过遍历数组中的元素,将当前下标位置上的元素与它之前下标的元素进行操作,然后将操作后的结果覆盖当前下标位置上的元素。

parallelSetAll 源码:

public static <T> void parallelSetAll(T[] array, IntFunction<? extends T> generator) {
   
    Objects.requireNonNull(generator);
    IntStream.range(0, array.length).parallel().forEach(i -> {
    array[i] = generator.apply(i); });
}

示例:parallelSetAll的使用,将数组中的每个元素值变为前一个元素和后一个的和。

int[] arr = new int[]{
   1,2,3,4};
Arrays.parallelPrefix(arr,((left, right) -> {
   
    return left + right;
}));
// Arrays.parallelPrefix(arr,(left,right)->left+right);
System.out.println(Arrays.toString(arr));
相关文章
|
20天前
|
Java
常用工具类-Collections
本文介绍了Java中Collections工具类的功能和用法,包括对集合进行排序、查找、填充操作,判断集合是否有交集,以及创建不可变集合的方法。通过示例代码展示了如何使用Collections类提供的静态方法,如reverse、shuffle、sort、swap、binarySearch、max、min、fill、frequency、disjoint、emptyList等,突出了Collections类在操作集合时的便利性和实用性。
常用工具类-Collections
Java-Arrays.sort()方法的比较器
Arrays.sort()有以下重载(此处只展示两种): Arrays.sort(Object[] a); Arrays.sort(T[] a, Comparator<? super T> c); Arrays.sort(Object[] a) 此方法看似没有要求我们实现比较器,对于基本数据类型,String类型确实如此,因为这些类型中已经自带了compareTo()方法
|
5月前
|
Java
聊聊Java集合框架中的Arrays类
``Arrays`` 和 ``Collections``是分别操作数组和集合的两个工具类。今天就来对 ``Arrays`` 中的内容作个总结。
108 1
聊聊Java集合框架中的Arrays类
|
算法 Java
Java 中Arrays工具类的使用
Java 中Arrays工具类的使用
88 0
|
5月前
|
Java 开发工具
JavaSE基础篇:Arrays数组工具类
JavaSE基础篇:Arrays数组工具类
|
索引
Arrays工具类的常用方法
Arrays工具类的常用方法
71 0
|
存储 Java 索引
Arrays Collections工具类
Arrays Collections工具类
arrays工具类-java
java.util.Arrays是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作。 public static String tostring(数组):将参数数组变成字符串 (按照默认格式:[元素1,元素2,元素3...]) public static void sort(数组):按照默认升序(从小到大)对数组的元素进行排序。 备注: 1.如果是数值,sort默认按照升序从小到大2如果是字符串,sort默认按照字母升序 3.如果是自定义的类型,那么这个自定义的类需要有Comparable或者 Comparator接口的支持。
104 0