Java核心技术知识点笔记—视图与包装器
前言:通过使用视图(views)可以获得其他实现了Collection接口和Map接口的对象。映射类的keySet方法就是一个示例。keySet方法返回一个实现Set接口的类对象,这个类的方法对原映射进行操作。这种集合称为视图。
1、轻量级集合包装器:Arrays
(1)静态方法asList返回一个包装了普通Java数组的List包装器;
(2)返回的对象不是ArrayList,是一个视图对象,带有访问底层数组的get和set方法。
(3)改变数组大小的所有方法(例如add和remove)都会抛出一个UnsupportedOperationException。
(4)可以接受可变数目的参数。
2、子范围:
(1)可以为很多集合建立子范围(subrange)视图。例如,使用subList方法获得一个列表的子范围视图:
List<String> subList = list.subList(1, 5);
第一个索引包含在内,第二个索引不不包含在内。
(2)可以将任何操作应用于子范围,并且能够自动地反映整个列表的情况。
(3)对于有序集和映射,可以使用排序顺序而不是元素位置建立子范围;
3、不可修改的视图:
(1)Collections有几个方法产生集合的不可修改视图(unmodifiable views)。这些视图对现有集合增加了一个运行时检查,如果发现试图对集合进行修改,将抛出一个异常。
(2)不可修改视图并非集合本身不可修改。通过集合的原始引用仍可以对集合进行修改,也可以让集合的元素调用更改器方法。
(3)视图只是包装了接口而非实际集合对象,只能访问接口中定义的方法。
4、同步视图:
(1)如果有多个线程访问同一个集合,必须确保集不会被意外破坏。
(2)类库的设计者使用视图机制来确保常规集合的线程安全,而不是实现线程安全的集合类。
5、受查视图:对泛型类型发生问题时提供调试支持。受限于虚拟机可以运行的运行时检查。