java学习笔记之Arrays.asList
来源:互联网 发布:mac新版itunes添加铃声 编辑:程序博客网 时间:2024/05/30 23:02
在一个网站看工厂设计模式, 提到Arrays.asList这个方法,这是一个为数组产生一个List视图的方法。具体定义为
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);}
这个方法有两个问题比较有意思。
首先, 参数是可变参数,有点类似C里面printf,参数个数可变。这是java 1.5才引入的新语法,接触得不多。Arrays.asList的通常用法是传入一个array,所以这个可变参数也可以由一个array来代替。而传入多个参数, 最终其实也是被处理成一个array来操作。
其次, 初看返回是个ArrayList,一般都以为是java.util.ArrayList,其实这里是java.util.Arrays.ArrayList, 是定义在Arrays.java里的一个私有静态内部类,也就是说只有在Arrays.java内部可以被使用,这个类实现了AbstractList,,但是并没有重写add和remove操作,由于AbstractList的这两个方法实现只是简单的抛出异常, 所以通过这个方法返回的List在调用add或remove时, 会抛出UnsupportedOperationException这个runtime异常, 因此Arras.asList产生的数组是不可变长的,但是可以改变内容, 并且会write through到原来的数组里面。这一点看过Arrays.ArrayList的构造函数就不难理解了
private final E[] a;
ArrayList(E[] array)
if (array==null)}
throw new NullPointerException();
a = array;
这里其实只是简单的把传入的参数赋值给内部的一个数组变量a而已, 而在Arrays.ArrayList的set操作中,就是更改a里面的内容,其实指向的是原始从Arrays.asList传入的数组。
说完这些, 回到工厂模式上来。 Arrays.asList返回的是一个List类型, 具体的实现类,也就是上面说的Arrays.ArrayList并没有暴露给client,更不用说具体实例如何生成,这里很好的展示了工厂模式所要达到的效果。
- java学习笔记之Arrays.asList
- java之Arrays的asList方法
- 【java】Arrays.asList、Arrays.copyOfRange
- Java Arrays.asList 实例
- java -> Arrays.asList()用法
- Java中Arrays.asList()
- Java Arrays.asList注意事项
- Java Arrays.asList()案例
- java.util.Arrays.asList 问题
- java.util.Arrays.asList 问题
- java Arrays.asList()源码剖析
- java Arrays.asList的用法
- Java里的Arrays.asList
- Java中的Arrays.asList()方法
- Java Arrays.asList()方法详解
- Java学习笔记之Arrays工具类
- Java学习笔记:Arrays
- Arrays.asList()
- 视频转码
- 经典排序算法3(选择排序)
- C++ 对象指针(函数指针)
- linux下mysql配置文件my.cnf详解
- C++第12周报告(一)用循环控制语句编写程序,完成表达式的计算
- java学习笔记之Arrays.asList
- POJ 2455 网络流英文阅读题
- 如何计算空间复杂度
- 软件项目管理框架--生命周期阶段
- HDU 3986 最短路+枚举
- 深入浅出Windows PE(一) PE文件头
- Windows Phone开发(29):隔离存储C
- c++多线程(二)
- Java对象持久化技术Hibernate入门之一