目录
一、Arrays工具类
(1)引言
(2)基本介绍
(3)主要功能(提供的方法)
(I)排序(Arrays.sort())
(II)搜索(查找)(Arrays.binarySearch())
(III)打印和转换(Arrays.toString()、Arrays.asList())
(IIII)复制(Arrays.copyOfRange())
(IIIII)填充(替换)(Arrays.fill())
二、asList()方法
(1)基本介绍
(2)功能介绍
(I)返回的列表大小固定。
反例(错误示范)
转换为ArrayList,才能进行add()操作。
(II)修改原始数组会影响列表。
(III)基本类型数组的注意。
(IIII)常见用途。
(3)大部分情况的代码示例
一、Arrays工具类
(1)引言
- 实际的开发中,经常需要按某些特定条件对容器或者数组进行查找、替换、排序、反转甚至是打乱等操作。直接编写代码实现可以,但是会增加工作量,且性能不能得到保证。
- 应对这种情况,而Java集合提供了两个工具类"Collections"、"Arrays"。其中这两个类提供了很多的静态方法。提供"类名.方法"完成操作即可。
(2)基本介绍
- Arrays工具类是Java中的一个非常实用的工具类,它位于java.util包下。专门用于对数组进行各种操作。由于数组本身是一个固定长度的数据结构,且提供的方法有限,Arrays工具类通过提供一系列的静态方法,极大地扩展了数组的功能。
(3)主要功能(提供的方法)
(I)排序(Arrays.sort())
- Arrays.sort(T[] a)。此方法对数组a中的所有元素进行升序排序。这里的T代表数组元素的类型,且该类型必须实现了Comparable接口。自然排序(从小到大)就是根据元素类型的自然顺序(即compareTo方法定义的顺序)进行排序。
- 工具类"Arrays"还提供了多个重载的sort()方法。也就是既可以自然排序,也可以通过传入比较器参数按照自定义的规则排序。
- Arrays.sort(T[] a, Comparator<? super T> c)。此方法允许用户传入一个自定义的Comparator来实现排序。Comparator是一个函数式接口,它包含了一个compare方法,用于比较两个对象。通过实现这个compare()方法,用户可以定义自己的排序规则。如果compare方法返回负数,则表示第一个参数应该排在第二个参数之前;如果返回正数,则表示第一个参数应该排在第二个参数之后;如果返回0,则表示两个参数相等
(II)搜索(查找)(Arrays.binarySearch())
- Arrays.binarySearch(Object[] a, Object key)。使用二分查找算法在已排序的数组中查找特定元素。如果找到该元素,则返回其索引;如果未找到,则返回-(插入点) - 1。注意,使用此方法前必须确保数组已经排序。
(III)打印和转换(Arrays.toString()、Arrays.asList())
- Arrays.toString(Object[] a)。返回数组内容的字符串表示形式,这对于打印数组或将其转换为字符串表示非常有用。打印的输出结果结构清晰,如下。
import java.util.Arrays; public class Main { public static void main(String[] args) { Integer[] numbers = {1, 2, 3, 4, 5}; String arrayString = Arrays.toString(numbers); System.out.println(arrayString); // 输出:[1, 2, 3, 4, 5] String[] strings = {"Hello", "World", "Java"}; String stringArrayString = Arrays.toString(strings); System.out.println(stringArrayString); // 输出:[Hello, World, Java] } }
- 除了
Object[]
类型的数组,Arrays.toString()方法还有其他重载版本,可以处理基本类型数组(如int[]
、double[]
等),这些重载版本内部会将基本类型数组转换为对应的包装类型数组(如Integer[]
、Double[]
),然后调用Object[]
版本的toString()
方法。- Arrays.asList(T... a)。将数组转换为列表(List<T>)。但需要注意的是,这个方法返回的列表是固定大小的,它不支持add和remove等修改列表大小的操作。
(IIII)复制(Arrays.copyOfRange())
- Arrays.copyOf(T[] original, int newLength)。复制数组,返回一个新数组,其长度为newLength。如果newLength大于原数组的长度,则新数组其余部分将用null(对于对象数组)或0(对于基本类型数组)填充。
- Arrays.copyOfRange(T[] original, int from, int to)。复制指定范围的数组,返回一个新数组,包含从from(包含)到to(不包含)的元素。
(IIIII)填充(替换)(Arrays.fill())
- 在程序开发中,有时需要将一个数组中的所有元素替换成同一个元素。此时就可以用这个fill()方法,该方法可以将指定的值赋给数组中的每一个元素。
- Arrays.fill(Object[] a, Object val)。用指定的值填充整个数组。
- Arrays.fill(Object[] a, int fromIndex, int toIndex, Object val)。用指定的值填充数组的一部分,从fromIndex(包含)到toIndex(不包含)
二、asList()方法
(1)基本介绍
- asList()是Java中 java.util.Arrays 类的一个静态方法,它属于 Arrays 工具类中的方法。
- 这个方法的作用是将一个数组(无论是对象数组还是基本类型数组的包装类数组)转换成一个固定大小的列表(List)
- 但是,返回的列表是由原始数组支持的,这意呀着列表是非同步的。并且它的大小是固定的,即列表的大小不会随着原始数组的变化而变化。
(2)功能介绍
(I)返回的列表大小固定。
- 通过asList()方法获得的列表是固定大小的,不支持添加(add)或删除(remove)元素操作。尝试进行这些操作会抛出 UnsupportedOperationException 异常。如果需要可变列表,可以像下面一样的操作。
反例(错误示范)
转换为ArrayList,才能进行add()操作。
(II)修改原始数组会影响列表。
由于列表和数组共享相同的数据结构,因此如果你修改了原始数组中的元素,那么通过 asList()方法返回的列表中的相应元素也会发生变化。
(III)基本类型数组的注意。
asList()方法接受的是对象数组,因此如果你尝试将一个基本类型的数组(如 int[], double[] 等)直接传递给 asList,它不会按你期望的方式工作。
例如,Arrays.asList(new int[]{1, 2, 3}) 实际上会创建一个只包含一个元素的列表,这个元素是整个 int[] 数组,而不是数组中的每个 int 值。为了解决这个问题,你需要将基本类型数组转换为包装类型的数组,例如使用 Integer[] 而不是 int[]。
(IIII)常见用途。
asList()方法常用于需要将数组作为列表传递给需要 List 类型参数的方法时,或者当你需要快速地将数组转换为一个列表以便使用列表的某些方法(如 contains, indexOf 等)时。
(3)大部分情况的代码示例
import java.util.Arrays; import java.util.List; public class AsListExample { public static void main(String[] args) { // 示例1:将数组转换为列表 String[] array = {"apple", "banana", "cherry"}; List<String> list = Arrays.asList(array); System.out.println(list); // 输出:[apple, banana, cherry] // 示例2:修改列表中的元素,同时影响原始数组 list.set(0, "grape"); System.out.println(Arrays.toString(array)); // 输出:[grape, banana, cherry] // 示例3:尝试添加元素到列表(会抛出异常) // list.add("date"); // 这行代码会抛出 UnsupportedOperationException // 示例4:将基本类型数组转换为列表(错误示例) int[] intArray = {1, 2, 3}; List<int[]> intList = Arrays.asList(intArray); // 注意:这里只有一个元素,即intArray本身 System.out.println(intList.size()); // 输出:1 // 正确的做法是将基本类型数组转换为包装类型数组,再转换为列表 Integer[] integerArray = {1, 2, 3}; List<Integer> integerList = Arrays.asList(integerArray); System.out.println(integerList); // 输出:[1, 2, 3] } }