Arrays.asList的使用
一、java.util.Arrays.asList() 的一般用法
如果将一个数组转换为 List,可以将需要转化的数组作为参数,或者直接把数组元素作为参数。但是其中参数必须是包装类类型,如果使用的是基本数据类型,可以使用Jdk8新特性进行解决
具体代码如下:
//1将需要转化的数组作为参数
String[] arrayList = {"1","2","3"};
List<String> myList = Arrays.asList(arrayList);//2.直接把数组元素作为参数
List<String> myList = Arrays.asList("1","2","3");
对于参数类型的不同的使用和解决方案如下:
//1.使用包装类数组
Integer[] arrayList = {1,2,3};
List<Integer> lists = arrays.asList(arrayList);
sout(lists.size());//3
lists.foreach(system.out::print);//1,2,3//2.使用基本类型数组
int[] arr = {1,2,3};
List lists = arrays.asList(arr);
sout(lists.size());//1
lists.foreach(system.out::print);//其打印出来的结果是是对象的hashCode以上打印出来的结果,并不是我们所预期的结果
asList 方法的参数必须是对象或者对象数组,而原生数据类型不是对象——这也正是包装类出现的一个主要原因。当传入一个原生数据类型数组时,asList 的真正得到的参数就不是数组中的元素,而是数组对象本身!此时List 的唯一元素就是这个数组。因为asList方法的签名如下:
public static <T> List<T> asList(T... a)
参数类型是 T ,根据官方文档的描述,T 是数组元素的 class
我们知道任何类型的对象都有一个 class 属性,这个属性代表了这个类型本身。原生数据类型,比如 int,short,long等,是没有这个属性的,具有 class 属性的是它们所对应的包装类 Integer,Short,Long。//可使用jdk8新特性进行解决
//Java 8 新引入的 Stream 操作
List myList = Arrays.stream(arr).boxed().collect(Collectors.toList());//1,2,3
对于arrays.asList()返回一个由指定数组生成的固定大小的 List。不可对其返回的值进行随意的增加和删除操作。
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {return new ArrayList<>(a);
}
//方法中的的确确生成了一个 ArrayList ,这不应该是支持动态扩容的吗?别着急,接着往下看。紧跟在 asList 方法后面,有这样一个内部类:private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable
{private static final long serialVersionUID = -2764017481108945198L;private final E[] a;ArrayList(E[] array) {a = Objects.requireNonNull(array);}@Overridepublic int size() {return a.length;}//...
}这个内部类也叫 ArrayList ,更重要的是在这个内部类中有一个被声明为 final 的数组 a ,所有传入的元素都会被保存在这个数组 a 中。到此,谜底又揭晓了: asList 方法返回的确实是一个 ArrayList ,但这个 ArrayList 并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类。这个内部类用一个 final 数组来保存元素,因此用 asList 方法产生的 ArrayList 是不可修改大小的。
Arrays.asList的使用相关推荐
- 为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:juejin.im/post/5d10e52ee51d454 ...
- Arrays.asList问题
2019独角兽企业重金招聘Python工程师标准>>> 先看实例程序,然后我们分析该程序 public class ArraysClone {@Testpublic void tes ...
- Arrays.asList方法总结
作用 : Arrays.asList() 将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是 ...
- Arrays.asList详解
记得以前写过一段这样的代码: String[] arr=...{"a","b","c"}; List l = Arrays.asList(a ...
- 集合 Arrays.asList | java.lang.UnsupportedOperationException: null
// Arrays.asList(xxx) 返回的是一个内部类, 不是正常认为实现的Collection // 无法进行增删 // 直接解决办法List<String> asList = ...
- 正确认识Arrays.asList方法
Arrays工具类提供了一个方法asList, 使用该方法可以将一个变长参数或者数组转换成List . 其源代码如下: /*** Returns a fixed-size list backed by ...
- Java Arrays.asList注意事项
Arrays.asList用来将数组转化为List,这个看似功能很明了的方法却暗藏玄机. 请先看下面的程序: int[] datas = new int[]{1,2,3,4,5}; List list ...
- java arrays.aslist()_Java中Arrays.asList()方法详解及实例
Arrays.asList() 是将数组作为列表. 问题来源于: public class Test { public static void main(String[] args) { int[] ...
- arrays中copyof_为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法?...
作者:我想问问天 来源:https://juejin.im/post/5d10e52ee51d454f6f16ec11 引语: 阿里巴巴java开发规范说到使用工具类Arrays.asList()方法 ...
- java集合的批量新建_java使用Arrays.asList快速创建List集合
程序中某段案例代码如下: Map> tMap = new HashMap>(); tMap.put(name, Arrays.asList(new CronTrigger[] { trig ...
最新文章
- C++ 程序不一定从 main 处开始执行
- 服务程序增加系统托盘
- 云视睿博流媒体服务器Lit,《云视睿博流媒体服务器参数表.docx
- 面向对象编程的五大基本原则
- CSS3 选择器(Selector)
- 非法关机的时候,postgresql启动故障的解决
- java xsi type_java – JAXB – 如何根据XML值设置XML元素的xsi:type?
- 电力施工作业现场安全综合管控平台项目解决方案
- java xmap_xml和java Bean的直接转换,Xmap
- 什么浏览器有html控制台,怎么打开浏览器的js控制台
- u盘安装Linux全过程,图文讲解用U盘安装Ubuntu Kylin全过程
- 计算机故障维修智能检测平台管理系统,计算机检测维修与数据恢复技能大赛竞赛设备采购项目.doc...
- CRM如何帮助企业提高客户满意度?
- word2vec词向量原理
- SpringCloud停更服务一览表
- mysql认证题库_MySQL 8 OCP(1Z0-908)认证考试题库原题(第11题)
- Linux 线程同步
- ftp 自动下载文件并解压
- 流量红利后期低成本的获客方式
- 碎碎念No.08 那个同居的姑娘
热门文章
- 前端基础:jQuery
- mysql主键约束自动增长_MySQL教程45-MySQL主键自增长
- Entrypoint size limit
- ROS学习笔记(一)补充篇 参考创客制造
- 华为鸿蒙mate,魅族确定将接入鸿蒙;华为鸿蒙平板MatePad Pro官宣
- 长春吉林大学计算机系奖状,校工会慰问五一劳动奖章、奖状以及巾帼标兵岗获奖个人和集体...
- IntelliJ IDEA下载安装及配置JDK
- Mac安装docker(轻松解决安装)
- CoordConv:卷积神经网络「失陷」,CoordConv来填坑
- 英语学习打卡(第二天)