Collections五种返回集合的特性分析
来源:互联网 发布:网络综合布线设计图 编辑:程序博客网 时间:2024/06/05 09:42
一、返回集合的方法
1. 返回空集合
EmptyList emptyList = Collections.emptyList();
返回空的List集,不可写,下面是从继承关系上分析
1.AbstractList实现List接口,实现了add(E e)方法
2.AbstractList中的add方法的实现仅仅是抛出异常:UnsupportedOperationException()
public void add(int index, E element) { throw new UnsupportedOperationException();}
3.EmytyList继承AbstractList,没有重写add方法
2. 返回受检集合
/** * 返回受检的List集合:可读可写 */Collections.checkedList();
返回特定类型元素的集合,再次添加的时候,会报类型转换错误
List<Object> list = new ArrayList<Object>();list.add("123");list.add(new Integer(0));//指定list中存储的元素类型Class type = String.class;List checkedList = Collections.checkedList(list, type);checkedList.add("hello");System.out.println(checkedList);//输出结果:[123, 0, hello]
//将integer类型的数据添加到受检的String元素类型的集合checkedList.add(new Integer(11));//java.lang.ClassCastException: Attempt to insert class java.lang.Integer element into collection with element type class java.lang.String
3. 返回不可修改集合
List<Object> list = new ArrayList<Object>();List<Object> unmodifiableList = Collections.unmodifiableList(list);
3.1.不可修改集合元素是针对的返回的不可修改的集合(指向的是原集合的引用),对原集合的修改,依然有效
List<Object> list = new ArrayList<Object>();list.add("123");List<Object> unmodifiableList = Collections.unmodifiableList(list);list.add("456");System.out.println(unmodifiableList);//输出结果:[123, 456]
3.2.不可添加元素
unmodifiableList.add("789");//报UnsupportedOperationException异常
1.UnmodifiableCollection实现Collection接口,重写add(E e)方法
public boolean add(E e) { throw new UnsupportedOperationException();}
2.UnmodifiableList继承UnmodifiableCollection,没有重写add方法
4. 返回单元素集合
//返回单元素Set集合Set<T> set = Collections.singleton(T o);//返回单元素List集合Collections.singletonList(T o);//返回单元素Map集合Collections.singletonMap(key, value);
以Set为例:返回仅包含一个元素、不可修改(待确定)和只读的Set集合
4.1.一个元素、不可修改
定义了一个final类型的元素,初始化实在构造器中完成的,元素是作为参数传入构造器的
private final E element; SingletonSet(E e) { element = e; }
不可修改是有限定条件的,取决于元素本身是否可以修改,element拿到的是元素的引用而已
String s = "hello";Set<String> singletonSet = Collections.singleton(s);s = "world";System.out.println(singletonSet);//输出结果:[hello],单元素集合的元素并没有被改变,因为String本身是不可变的(immutable)
List<Object> list = new ArrayList<Object>();list.add("123");Set<List<Object>> singleton = Collections.singleton(list);list.add("456");System.out.println(singleton);//输出结果:[[123, 456]].单元素集合的元素被改变,因为List本身是可变的(mutable)
4.2.只读:从继承关系上分析
1.AbstractCollection实现Collection接口,实现了add(E e)方法
2.AbstractCollection中的add方法的实现仅仅是抛出异常:UnsupportedOperationException().
public void add(int index, E element) { throw new UnsupportedOperationException();}
3.AbstractSet继承AbstractCollection接口,没有重写add(E e)方法
4.EmytyList继承AbstractList,没有重写add方法
5. 返回线程安全的集合
线程安全、可读可写
// Object on which to synchronizefinal Object mutex; //对元素的操作上锁public void add(int index, E element) { synchronized (mutex) {list.add(index, element);}}
List<Object> list = new ArrayList<Object>();list.add("123");List<Object> synchronizedList = Collections.synchronizedList(list);System.out.println(synchronizedList);synchronizedList.add("hello");//输出结果:[123]System.out.println(synchronizedList);//输出结果:[123, hello]
- Collections五种返回集合的特性分析
- 集合类Collections.sort()的源码分析
- 深入分析集合List的排序Collections.sort
- 集合框架五(hashCode 与Collections)
- Collections Collections.synchronizedCollection 集合的同步控制
- 集合详解(五):集合嵌套与Collections工具类
- Collections.sort()的分析
- 类 Collections集合的操作
- 五种傅里叶变换的特性
- 集合操作类Collections和Arrays,JDK1.5新特性
- 黑马程序员-Java 集合框架(二)-Map、Collections、新特性
- java 集合中的Collections.sort()排序方法的源码分析(一)
- Collections集合静态工具可以让非同步进行同步操作的源码分析
- 集合(五)工具类Collections和Arrays
- 垃圾邮件的五大特性分析及应对技巧
- 集合框架源码分析四(Collections类详细分析)
- 集合框架源码分析四(Collections类详细分析)
- kotlin源码分析-分析和使用Collections集合
- 记一次偶然遇到mysql的max_connection_errors错误
- Java_23种设计模式(二)----- 创建型模式
- php
- 关于场地营销的一些思考
- Spring COC TypeConverter
- Collections五种返回集合的特性分析
- Mantis1.2.19 在Windows 平台上的安装配置详解
- 进程与线程
- linux下,使用svn commit提交时,提示无法使用外部编辑器获得日志信息
- JavaScript流程控制
- Spring整合 jasperReport报表 包冲突 bug
- 你应该懂的wp-super-cache优化技巧-
- 决战 dp+矩阵乘法+NTT
- Invalid bound statement 错误的可能原因