集合包装器视图
Array
包装成List
:
Card[] cardArray = new Card[52];ListcardList = Arrays.asList(cardArray);复制代码
Arrays
类的静态方法 asList
将返回一个包装了 List
的包装器。 注意返回的是视图对象,它只能使用get
,set
方法。
Map
包装成Set
:
Set<Map.Entry<K, V>> entrySet()
返回Map.Entry
对象的一个集视图。Set<K> keySet()
返回映射中所有键的一个集视图。Col1ection<V> values()
返回映射中所有值的一个集合视图。
可以从集视图中删除元素,映射中对应的键和值也会被删除, 不过不能增加任何元素。
子范围视图
可以为集合建立子范围视图
List group2 =staff.subList(10, 20); // 列表的子范围SortedSetsubSet(E from, E to); //有序集根据排序顺序建立子视图SortedSet headSet(E to);SortedSet tailSet(E from);SortedMap subMap(K from, K to); //和有序集同理SortedMap headMap(K to);SortedMap tailMap(K from);复制代码
注意:
- 范围是左闭右开
- 可以将任何操作应用于子范围, 并且能够自动地反映到原范围。
- 对顺序集合对子集合添加元素时,新元素必须在子范围内
不可修改的视图
顾名思义生成不可修改的视图,如果发现试图对集合进行修改,就抛出一个异常。当然原对象肯定还是可以修改的。
例如:生成一个不可修改的Map视图:
TreeMapscores = new TreeMap<>();...Map umMap = Collections.synchronizedSortedMap(scores);复制代码
同步视图
类库的设计者使用视图机制来确保常规集合的线程安全,而不是实现线程安全的集合类。
例如:新建一个线程安全的Map:
Map());复制代码
受查视图
受查视图可以查出 将错误类型的元素混人泛型集合 这种情况。
例如:
Listsafestrings = Collections.checkedList(strings,String,class);复制代码
当加入错误类型时,会得到错误报告。