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 = { 1 2 3 4 };
     List<Integer> list = Ints.asList(intArray);
     list.set( 0 100 );
     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、两个集合类结合

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM