视图与包装器

Wu Jun 2020-01-01 11:43:49
Categories: > > Tags:

视图:保持对原集合的控制。只用来展示集合中的元素。

视图是不可修改的,任何改变视图 size 的操作都会影响到原集合。抛出异常。

1 轻量级集包装器

1.1 Arrays.asList 方法

Arrays.asList 方法返回一个包装了普通 Java 数组的 List 包装器,一个视图对象。

1.2 Collecitons.nCopies 方法

Collections.nCopies(n,anObject) 返回一个实现了 List 接口的不可修改的对象,一个视图对象。

给人一种包含 n 个元素,每个元素都像是一个 anObject 的错觉。

1.3 Collections.singleton 方法

Collections.singleton(Object obj) 返回一个视图对象,该对象实现了 set 接口。

该方法的好处是返回的对象实现了一个不可修改的单元素集,而不需要付出建立数据结构的开销。

singletonList 和 singletonMap 方法类似。

2 子范围

subList 建立左闭右开的子范围视图,对该子范围的任何操作将会影响到整个列表中!

subSet、subMap 等方法类似。

3 不可修改的视图

Collections 的某些方法用于产生集合的不可修改视图。

如果修改视图,就会抛出异常。可以修改原始集合。

unmodifiableCollection();
unmodifiableList();
unmodifiableSet();
unmodifiableSortedSet();
unmodifiableMap();
unmodifiableSortedMap();

4 同步视图

Java中,利用视图机制保证常规集合的线程安全,而不是实现线程安全的集合。

Collections.synchronized***() 方法可对任何集合装换成具有同步访问方法的集合。

5 被检查视图

包装一个具有检查类型机制的视图,对泛型类型插入时就进行检测。

Collections.checkedList();