Java容器中的视图

Java容器中的视图

Java中的视图主要用于对Java容器的操作, 视图实现了容器对应的接口,返回原容器对象进行操作.
Collections类包含了很多实用的方法,这些方法的参数和返回值都是集合;不要与Collection接口混淆。
视图主要有一下几种:

轻量级集合包装器

Arrays.asList(T ...t)提供一个实现有List接口的对象,对象内部使用数组实现,可以使用get()set()方法,但是不能使用add()remove()方法.
Collections.nCopys(int n, T o)提供一个只读的List接口对象,n个重复对象o的数组.
Collections.singleton(name)提供一个只有一个固定元素的Set集合.

子集视图

List.subList(fr, to)提供一个原集合的子列表,对子列表的操作会修改原列表.
SortedSet.subSet(fr, to)提供一个>=fr<to的子集.
SortedMap.subMap(fr, to)提供一个k>=fr&&k<to的子Map.

只读视图

只读视图有一下一些接口
Collections.unmodifiedCollection
Collections.unmodifiedList

Collections.unmodifiedSet
Collections.unmodifiedSortedSet
Collections.unmodifiedNavigableSet
Collections.unmodifiedMap
Collections.unmodifiedSortedMap
Collections.unmodifiedNavigableMap

同步视图

把原集合映射成为线程同步安全的集合.
Collections.synchronizedMap(new HashMap())

受查视图

    public static void main(String[] args) {
        ArrayList<String> str = new ArrayList<String>();
        ArrayList string = str;
        string.add(new Date());// 到这里并没有发现添加的类型不符
        Date date = (Date) string.get(0);
        System.out.println(date);

        /*
         * String s = (String) string.get(0);//这里检测到类型不匹配 System.out.println(s);
         */ 
        System.out.println("----------我是分割线----------");
        ArrayList<String> str2 = new ArrayList<String>();
        List<String> safe = Collections.checkedList(str2, String.class);
        List string02 = safe;
        string02.add(new Date());// 编译器检测到这里的add异常
        // 上面句编译会报错 java.lang.ClassCastException: Attempt to insert class java.util.Date element into collection with element type class java.lang.String
        System.out.println("ok");
    }

猜你喜欢

转载自blog.csdn.net/robin912/article/details/80962172