Java如何正确的将数值转化为ArrayList?

摘要:
Java使用的工具类Arrays AsList()似乎能够将数组转换为List,但实际使用时有两个缺陷:1.它是一个通用方法。传入的参数必须是对象数组。当传入本机数据类型数组时,Arrays asList()获得的实际参数不是数组中的元素,而是数组对象本身。如何真正将Java数组转换为ArrayList?
Java中使用工具类Arrays.asList()看似可以把一个数组转为List,但实际使用时有两个坑:1、它是泛型方法,传入的参数必须是对象数组,当传入一个原生数据类型数组时,Arrays.asList() 的真正得到的参数就不是数组中的元素,而是数组对象本身。比如传入int[] intArray={1,2,3},它返回的list只有一个元素就是intArray。
2、Arrays.asList() 方法返回的并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类,这个内部类并没有实现集合的修改方法或者说并没有重写这些方法,即它返回的List并不能当成一个真正的ArrayList对象来用。

那么如何真正将Java数组转化为ArrayList呢? 

1. 自己动手实现(教育目的)

//JDK1.5+ static <T> List<T> arrayToList(final T[] array) {   final List<T> l = new ArrayList<T>(array.length);    for (final T s : array) {     l.add(s);   }   return (l); }
Integer [] myArray = { 1, 2, 3 }; System.out.println(arrayToList(myArray).getClass());//class java.util.ArrayList

2. 最简便的方法(推荐)

List list = new ArrayList<>(Arrays.asList("a", "b", "c"))

3. 使用 Java8 的Stream(推荐)

Integer [] myArray = { 1, 2, 3 }; List myList = Arrays.stream(myArray).collect(Collectors.toList()); //基本类型也可以实现转换(依赖boxed的装箱操作) int [] myArray2 = { 1, 2, 3 }; List myList = Arrays.stream(myArray2).boxed().collect(Collectors.toList());

4. 使用 Guava(推荐)

对于不可变集合,你可以使用ImmutableList类及其of()copyOf()工厂方法:(参数不能为空)

List<String> il = ImmutableList.of("string", "elements");  // from varargs List<String> il = ImmutableList.copyOf(aStringArray);      // from array

对于可变集合,你可以使用Lists类及其newArrayList()工厂方法:

List<String> l1 = Lists.newArrayList(anotherListOrCollection);    // from collection List<String> l2 = Lists.newArrayList(aStringArray);               // from array List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs

5. 使用 Apache Commons Collections

List<String> list = new ArrayList<String>(); CollectionUtils.addAll(list, str);

免责声明:文章转载自《Java如何正确的将数值转化为ArrayList?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浅谈volatile与automicInteger基于S5PC100的FIMC控制器解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java解决大文件断点续传

第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName =null; String newpathname =null; String fileAddre ="/numUp"; try { InputStream stream = file.getInputStream(...

【Python】解压文件/ZIP等 并实时计算解压进度

import zipfile def read_zip(zip_file_path: str, unpack_path: str, ws_msg: WebSocketMsg): """ 解压ZIP文件 @param zip_file_path: ZIP文件路径(ex. E:\aaa\a.zip) @param unpack_...

ASP.NET Core 实现 MQTT通讯协议 Demo(开源库:MQTTnet)

1、什么是MQTT   MQTT(message queuing telemetry transport)是IBM开发的即时通讯协议,是一种发布/订阅极其轻量级的消息传输协议,专门为网络受限设备、低宽带以及高延迟和不可靠的网络而设计的。由于以上轻量级的特点,是实现智能家居的首选传输协议,相比于XMPP,更加轻量级而且占用宽带低。简单来说HQTT是一种通信...

利用Microsoft.Practices.Unity的拦截技术,实现.NET中的AOP

1、记住这个单词的意思:Interception(拦截) 2、首先说一下原理和背景   原理:所谓的AOP就是面向切面编程,这里不多说,百度搜索。   目的:个人认为是为了解耦,部分代码跟业务代码分离,业务代码里面不掺杂其它功能,比如:记录异常、记录操作日志。   背景:项目基本功能已完成,产品要求记录用户的操作日志,新增的时候记录某人在某时做了某事(包括...

URL与String转换

NSString *str = @"www.baidu.com"; NSURL *URL = [NSURL URLWithString:str];  //string>url NSString *str1 = [URL absoluteString];   //url>string...

用java调用oracle存储过程总结(转)

//1、call+包名+存储过程名(传入、传出值用?) String str="{call SMSBUSINESS.deleteZhZMember(?,?,?)}"; //2、建立连接 Connection conn=null; conn=DriverManager.getConnection(); //3、使用java.sql.*类 C...