Java数组转集合之Arrays.asList()用法

Arrays.asList()用法

使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合。

而一开始asList的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用asList(),而asList()恰巧可用于将数组转为集合。

public class App {
  public static void main(String[] args) {
    List<String> stringA = Arrays.asList("A");
    String[] stringArray = {"B"};
    List<String> stringB = Arrays.asList(stringArray);
 
    System.out.println(stringA);
    System.out.println(stringB);
  }
}

  运行结果

[A]
[B]
public class App {
  public static void main(String[] args) {
    int[] intarray = {1, 2, 3, 4, 5};
    //List<Integer> list = Arrays.asList(intarray); 编译通不过
    List<int[]> list = Arrays.asList(intarray);
    System.out.println(list);
  }
}
 
output:
[[I@66d3c617]

你是不是以为上面 👆那个 list 是 java.util.ArrayList ?

 实际上返回的是:java.util.Arrays.ArrayList

源码:

但它和ArrayList貌似很像唉!有什么不同吗?

不同之处:

Arrays.ArrayList 是工具类 Arrays 的一个内部静态类,它没有完全实现List的方法,而 ArrayList直接实现了List 接口,实现了List所有方法。

 

 

 

  • 长度不同 和 实现的方法不同

    Arrays.ArrayList是一个定长集合,因为它没有重写add,remove方法,所以一旦初始化元素后,集合的size就是不可变的。

  • 参数赋值方式不同

Arrays.ArrayList将外部数组的引用直接通过“=”赋予内部的泛型数组,所以本质指向同一个数组。

ArrayList是将其他集合转为数组后copy到自己内部的数组的。

所以使用Arrays.asList()需要注意以下两点。

一、不能把基本数据类型转化为列表

仔细观察可以发现asList接受的参数是一个泛型的变长参数,而基本数据类型是无法泛型化的,如下所示:

 public class App {
  public static void main(String[] args) {
    int[] intArray = {1234};
    List<Integer> list = Ints.asList(intArray);
    list.set(0100);
    System.out.println(Arrays.toString(intArray));
    list.add(5);
    list.remove(0);
 
  }
}

  这是因为把int类型的数组当参数了,所以转换后的列表就只包含一个int[]元素。

要想把基本数据类型的数组转化为其包装类型的list,可以使用guava类库的工具方法,示例如下:

int[] intArray = {1, 2, 3, 4};

List<Integer> list = Ints.asList(intArray);

支持基础类型的方式

1、如果使用Spring

 

2、如果使用Java 8

数组转ArrayList

1、遍历转换 

 

2、使用工具类

3、如果使用Java 8

既可以用于基本类型也可以返回想要的集合。

 自己比较常用

int a [] ={1,2,3};

List<Integer> ilist = Arrays.stream(a).boxed()
.collect(Collectors.toList());
System.out.println(ilist);

  

4、两个集合类结合

 

 

posted @ 2019-06-10 10:06  AlexZS  Views(20786)  Comments(1)    收藏  举报