前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Arrays API

Arrays API

原创
作者头像
HLee
修改2021-09-09 10:40:15
3480
修改2021-09-09 10:40:15
举报
文章被收录于专栏:房东的猫房东的猫

copyOf

Arrays类的copyOf(U[] original, int newLength, Class<? extends T[]> newType)方法用于复制指定数组original到新数组,新数组的长度为newLength,新数组元素类型为newType。

  1. 如果新数组的长度大于旧数组,那么多出的那部分用null填充;
  2. 如果新数组的长度小于旧数组,那么少的那部分直接截取掉;
代码语言:javascript
复制
Long[] array1 = new Long[]{1L, 2L, 3L};

Object[] array2 = Arrays.copyOf(array1, 5, Object[].class);
System.out.println(Arrays.toString(array2)); // [1, 2, 3, null, null]

Object[] array3 = Arrays.copyOf(array1, 2, Object[].class);
System.out.println(Arrays.toString(array3)); // [1, 2]

asList

解释:Arrays.asList会将数组转化为ArrayList<>。

代码语言:javascript
复制
源码:
public static <T> List<T> asList(T... a) {
   return new ArrayList<>(a);
}
代码语言:javascript
复制
public class test {
  public static void main(String[] args) {
   
    String[] str = new String[5];
    str[0] = "a";
    str[1] = "b";
    str[2] = "c";
    str[3] = "d";
    str[4] = "e";

    //调用Arrays中的asList方法将String[]转化为一个List<String>
    List<String> list = Arrays.asList(str);
    System.out.println("list:" + list.toString());

    //再为list单独添加元素
    list.add("f");
    list.add("g");
    System.out.println("list:" + list.toString());
  }
}

正常Arrays.asList(str)是没问题的,但是在list.add("f")、list.add("g")的时候出现了UnsupportedOperationException异常。

解释:因为在Arrays.asList的时候,Arrays类是return new ArrayList<>(a)一个内部ArrayList类(成员内部类),这个内部类继承了AbstractList类,因为内部类没有重新父类的add方法,转而在add操作时会调用父类的add方法,而AbstractList在add的时候会抛出UnsupportedOperationException异常。但是由于ArrayList类也集成了AbstractList父类同时也重写了add、remove操作索引不会调用父类的方法,因此不会抛出异常。

代码语言:javascript
复制
源码:AbstractList类

public void add(int index, E element) {
   throw new UnsupportedOperationException();
}

public E remove(int index) {
   throw new UnsupportedOperationException();
}
代码语言:javascript
复制
方式一:
String[] strArray = new String[2];
ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;
list.add("1");
System.out.println(list);

方式二:(最高效)
String[] strArray = new String[2];
ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
Collections.addAll(arrayList, strArray);
arrayList.add("1");
System.out.println(arrayList);

方式三:
List<Integer> intList= Arrays.stream(new int[] { 1, 2, 3, }).boxed().collect(Collectors.toList());
List<Long> longList= Arrays.stream(new long[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
List<Double> doubleList= Arrays.stream(new double[] { 1, 2, 3 }).boxed().collect(Collectors.toList());

String[] arrays = {"tom", "jack", "kate"};
List<String> stringList= Stream.of(arrays).collect(Collectors.toList());

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • copyOf
  • asList
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com