Java核心技术读书笔记9-2 Java集合视图与包装器

2021年11月20日 阅读数:12
这篇文章主要向大家介绍Java核心技术读书笔记9-2 Java集合视图与包装器,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

4.视图与包装器

视图(view)即对原数据结构的数据根据不一样方式映射成一个新集合(如HashMap的keySet),其特色是对视图进行操做,也会对原数据结构产生影响。数组

4.1 轻量级集合包装器
经过Arrays的asList方法将返回一个包装了普通Java数组的List包装器返回一个视图。该视图能够使用get和set方法,但改变数组大小的全部方法都会引起异常
一样,Arrays.asList(parameters); //能够接受可变参,实际上仍然是为用数组接收,返回一个不可变长的集合视图。
Collections.nCopies(n, anObject); //返回一个包含n个元素每一个元素都是anObject的不可修改集合安全

4.2 子范围视图
能够经过subList方法返回一个指定范围的子集合视图。能够对这个子集合视图作任何操做,操做结果也将影响原集合。
List subList = staff.subList(10, 20); //返回staff[10, 19]范围内的子集合视图数据结构

对于实现了SortedSet与SortedMap接口的有序集和映射,可使用排序顺序而不是元素位置创建子范围。

线程

而对于Java 6的NavigableSet接口能够赋予更多的子范围控制能力。能够指定是否包含边界。
设计

4.3 不可修改视图
Collections有一些方法能够对相应的数据结构对象返回其不可修改视图。若对这些视图进行修改则会抛出一个异常。
对象

4.4 同步视图
类库的设计者确保访问常规集合的线程安全是经过使用同步视图来完成的,如synchronizedMap方法能够将任何一个映射表转换成具备同步方法的Map,以后不一样线程对于该Map视图的操做都是同步的。blog

4.5 受查视图
受查视图将会对插入不合法类型的对象操做抛出异常。可是对于泛型会受限于JVM的擦除问题,例如JVM对于ArrayList<Pair >会将元素擦除成Pair,因此没法阻止插入Pair 排序

4.6 可选操做
对于视图的操做可能会有一些局限性,例如不能改变大小或彻底不可变等等,不然会抛出异常。在定义相应接口时,还会提供说明一些方法是可选操做。这种与接口是一种规范,实现类必须实现全部方法的理念产生了冲突,但这确实带来了不必单独额外的定义接口简单性。因此在本身编写类库时能够避免相似的出现接口中“可选”方法的定义。
接口