关于java:ArraysasList使用指南

4次阅读

共计 4092 个字符,预计需要花费 11 分钟才能阅读完成。

Arrays.asList() 是一个 Java 的静态方法,它能够把一个数组或者多个参数转换成一个 List 汇合。这个办法能够作为数组和汇合之间的桥梁,不便咱们应用汇合的一些办法和个性。本文将介绍 Arrays.asList() 的语法、利用场景、坑点和总结。

  • 语法
  • 利用场景
  • 坑点
  • 总结

语法

Arrays.asList() 的语法格局如下:

public static <T> List<T> asList(T... a)

这个办法承受一个泛型参数 T,示意数组或者参数的类型。T 必须是一个援用类型,不能是一个根本类型,例如 int, double, char 等。如果传入一个根本类型的数组,Arrays.asList() 会把它当作一个 Object 类型的元素,而不是把它的每个元素当作 Object 类型。这样就会导致返回的 List 只有一个元素,就是原始数组自身。

Arrays.asList() 返回的 List 是一个 Arrays 类的外部类,它持有一个对原始数组的援用。这意味着对 List 的批改会反映到数组上,反之亦然。然而,这个 List 的大小是固定的,不能进行减少或者删除的操作,否则会抛出 UnsupportedOperationException 异样。

Arrays.asList() 返回的 List 是可序列化的,并且实现了 RandomAccess 接口,示意它反对随机拜访。

利用场景

Arrays.asList() 能够用在以下几种场景中:

  • 当咱们须要创立一个不须要扭转大小或者内容的 List 汇合时,咱们能够应用 Arrays.asList() 来疾速地初始化一些元素。例如:
// 应用 Arrays.asList() 创立一个不可变的 List
List<String> list = Arrays.asList("a", "b", "c");
System.out.println(list); // [a, b, c]
  • 当咱们须要创立一个空的或者单元素的 List 汇合时,咱们能够应用 Arrays.asList() 来简化代码。例如:
// 应用 Arrays.asList() 创立一个不可变的空 List
List<String> emptyList = Arrays.asList();
System.out.println(emptyList); // []

// 应用 Arrays.asList() 创立一个不可变的单元素 List
List<String> singletonList = Arrays.asList("a");
System.out.println(singletonList); // [a]
  • 当咱们须要从一个数组或者其余汇合类创立一个不可变的 List 汇合时,咱们能够应用 Arrays.asList() 来不便地转换。例如:
// 应用 Arrays.asList() 从数组创立一个不可变的 List
String[] array = {"a", "b", "c"};
List<String> listFromArray = Arrays.asList(array);
System.out.println(listFromArray); // [a, b, c]

// 应用 Arrays.asList() 从其余汇合类创立一个不可变的 List
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
List<String> listFromSet = Arrays.asList(set.toArray(new String[0]));
System.out.println(listFromSet); // [a, b, c]
  • 当咱们须要应用一些汇合类的办法或者个性时,咱们能够应用 Arrays.asList() 来把数组转换成汇合。例如:
// 应用 Arrays.asList() 把数组转换成汇合,并应用 Collections 类的办法
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
Collections.sort(list); // 对汇合进行排序
System.out.println(list); // [a, b, c]
Collections.reverse(list); // 对汇合进行反转
System.out.println(list); // [c, b, a]
Collections.shuffle(list); // 对汇合进行随机打乱
System.out.println(list); // [b, a, c] 或者其余随机程序

// 应用 Arrays.asList() 把数组转换成汇合,并应用 Stream API
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
list.stream().forEach(System.out::println); // 对汇合进行遍历并打印每个元素
list.stream().map(String::toUpperCase).forEach(System.out::println); // 对汇合进行映射并打印每个元素的大写模式
list.stream().filter(s -> s.startsWith("a")).forEach(System.out::println); // 对汇合进行过滤并打印以 a 结尾的元素 

坑点

Arrays.asList() 也有一些坑点,须要留神以下几点:

  • Arrays.asList() 不反对根本数据类型的数组,因为它只能承受 Object 类型的参数或者数组。根本数据类型(如 int, double, char 等)不是 Object 的子类,所以不能间接作为 Arrays.asList() 的参数。如果传入一个根本数据类型的数组,Arrays.asList() 会把它当作一个 Object 类型的元素,而不是把它的每个元素当作 Object 类型。这样就会导致返回的 List 只有一个元素,就是原始数组自身。

如果想要把一个根本数据类型的数组转换成 List,有以下几种办法:

  • 应用循环遍历数组,并把每个元素增加到 List 中。这样能够利用主动装箱(autoboxing)的个性,把根本数据类型转换成对应的包装类(如 Integer, Double, Character 等)。
  • 应用 Java 8 中的 Stream API,能够用一行代码实现数组到 List 的转换。能够应用 Arrays.stream() 或者 IntStream.of() 等办法,而后调用 boxed() 和 collect() 办法。
  • 应用第三方库,如 Guava 或者 Apache Commons Lang,它们提供了一些工具类和办法来解决根本数据类型的数组和汇合。

示例代码如下:

// 应用循环遍历数组,并把每个元素增加到 List 中
int[] array = {1, 2, 3};
List<Integer> list = new ArrayList<>();
for (int num : array) {list.add(num); // 利用主动装箱
}
System.out.println(list); // [1, 2, 3]

// 应用 Stream API 实现数组到 List 的转换
int[] array = {1, 2, 3};
List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
System.out.println(list); // [1, 2, 3]

// 应用 Guava 实现数组到 List 的转换
int[] array = {1, 2, 3};
List<Integer> list = Ints.asList(array);
System.out.println(list); // [1, 2, 3]
  • Arrays.asList() 返回的 List 是不可变的,也就是说,不能对它进行减少或者删除的操作,否则会抛出 UnsupportedOperationException 异样。这是因为 Arrays.asList() 返回的 List 是一个 Arrays 类的外部类,它没有实现 add() 和 remove() 等办法。

如果想要创立一个可变的 List 汇合,有以下几种办法:

  • 应用 ArrayList 的结构器,并把 Arrays.asList() 作为参数传入。这样能够创立一个新的 ArrayList 对象,并复制原始数组中的元素。例如:
// 应用 ArrayList 的结构器创立一个可变的 List
String[] array = {"a", "b", "c"};
List<String> list = new ArrayList<>(Arrays.asList(array));
System.out.println(list); // [a, b, c]
list.add("d"); // 能够减少元素
System.out.println(list); // [a, b, c, d]
  • 应用 Java 8 中的 Stream API,能够用一行代码实现数组到 List 的转换。能够应用 Arrays.stream() 或者 IntStream.of() 等办法,而后调用 collect() 办法。例如:
// 应用 Stream API 实现数组到 List 的转换
int[] array = {1, 2, 3};
List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
System.out.println(list); // [1, 2, 3]
list.add(4); // 能够减少元素
System.out.println(list); // [1, 2, 3, 4]

总结

Arrays.asList() 是一个简略而有用的办法,它能够帮忙咱们把数组转换成 List 汇合。然而它也有一些限度和注意事项,咱们应该依据具体的需要和场景来抉择适合的办法。心愿这篇文章对你有所帮忙,谢谢您的浏览。😊

关注公众号【waynblog】每周分享技术干货、开源我的项目、实战经验、国外优质文章翻译等,您的关注将是我的更新能源!

正文完
 0