`
hbkh2000
  • 浏览: 197864 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java集合视图技术

阅读更多

 

Collection和Map的视图技术,令我豁然开朗! 

        比如:Map.keySet(),Map.values(),Map.entrySet().可以得到三个视图:键值,值,键/值对。对视图的操作, 

将直接影响原始集合!

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * 集合框架视图技术;
 * 
 */
public class CollectionView01
{
    public void viewOper()
    {
        
        String[] temp = new String[3];
        //返回一个视图对象,你只能使用get(),set()方法访问底层的数组,而任何尝试  
        //改变数组大小的方法都抛出UnsupportedOperationException。        
        List<String> tempList = Arrays.asList("aa", "bb", "cc");
        System.out.println("01 = " + tempList.get(0));
        System.out.println("02 = " + tempList.set(1, "ddd"));
        System.out.println("03 = " + tempList.get(1));
        
        //返回一个实现了list接口不可修改的对象;
        List<String> settings = Collections.nCopies(5, "Baby");
        
        String testStr0 = settings.get(0);
        String testStr1 = settings.get(1);
        System.out.println(testStr1 == testStr0);//返回true        
        System.out.println(testStr0 + "   " + testStr1);
        System.out.println("settings01 =" + settings);
        //抛出UnsupportedOperationException
        //System.out.println("set01 =" + settings.set(1, "bbb"));        
        //抛出UnsupportedOperationException
        //settings.add("B");      
        System.out.println("settings02 =" + settings);
    }
    
    /*
     * 可以为许多集合建立子范围视图!任何操作
     * 作用于子范围,他们都能通过在这个集合中反映出来!
     */
    public void viewSub()
    {
        List<String> tempList = new ArrayList<String>();
        
        for (int i = 0; i < 10; i++)
        {
            
            tempList.add("" + i);
            
        }
        //返回子范围视图;
        List subList = tempList.subList(3, 7);
        
        System.out.println(subList);//[3, 4, 5, 6]
        
        System.out.println("01 = " + subList.get(0));
        System.out.println("02 = " + subList.set(0, 33));
        System.out.println(subList);
        subList.clear();
        System.out.println(tempList);//[0, 1, 2, 7, 8, 9]
        
    }
    
    /*
     *如果你想查看代码的某个部分但不修改某个集合的内容可以考虑以下方法;
     *注:不可修改视图不是本身不可修改,通过集合的原始引用,
     *我们仍然能够做集合想做的事情。视图只包装了接口而不是实际的对象。
     */
    public void viewUnmodif()
    {
        //        Collections.unmodifiableCollection()
        //        Collections.unmodifiableList()
        //        Collections.unmodifiableMap()
        //        Collections.unmodifiableSet()
        //        Collections.unmodifiableSortedSet()
        //        Collections.unmodifiableSortedMap()
        
        List<String> tempList = new LinkedList();
        for (int i = 0; i < 10; i++)
        {
            tempList.add("" + i);
        }
        //返回不可修改视图
        List<String> unmodifiableList = Collections.unmodifiableList(tempList);
        String temp = unmodifiableList.get(1);
        System.out.println("01 = " + tempList);
        
        tempList.add("baby");
        System.out.println("02 = " + tempList);
        
        unmodifiableList.add("bb");
        //抛出UnsupportedOperationException
        System.out.println("03 = " + tempList);
    }
    
    public void viewSyn()
    {
//        多线程来访问一个集合!我们能够想象会发生什么。
//        一个线程试图将一个元素添加到散列表中,而另一个线程或者正在遍  
//        历,或者对元素重新散列!或者......
//        Java的设计者没有实现“安全集合类”,而是使用视图机制来保证集合线程的安全!
//        HashMap<String,String> hashMap=new HashMap<String,String>();
//        Map<String,String> map=Collections.synchronizedMap(hashMap);
//        map引用将会使得一切恢复正常!不必担心同步的问题!但是这个包装器的作用有限:
//        推荐使用:java.util.concurrent中定义的集合类!

    }
    public void viewCheck()
    {


    }
    
    
    
    public static void main(String[] a)
    {
        CollectionView01 view = new CollectionView01();
        //轻量级集合包装器Arrays和Collections ;
        //view.viewOper();
        //子范围视图
        //view.viewSub();
        //不可修改视图
        //view.viewUnmodif();
        //同步视图
        view.viewSyn();
        //被检验视图
        view.viewCheck();
        //可选操作的说明
        //view.
    }
}

 

分享到:
评论
1 楼 chengji518 2011-02-10  
不错的文章,加油

相关推荐

    collection-views:低开销,Java集合上受保护的视图

    集合视图版本兼容性当前版本的集合视图已通过认证,可与以下lambda版本兼容: 5.3.0 5.2.0 5.1.0 5.0.0 4.0.0目录 ImmutableVector&lt;A&gt; ImmutableNonEmptyVector&lt;A&gt; Set&lt;A&gt; NonEmptySet&lt;A&gt; ImmutableSet&lt;A&gt; ...

    精通java集合框架--List,Set..

    既然您已经具备了一些集的理论,您应该能够更轻松的理解“集合框架”。 “集合框架”由一组用来操作对象的接口组成。不同接口描述不同类型的组。 在很大程度上,一旦您...此外,还有返回 Map 对象的 Set 视图的方法:

    java核心面试技术点

    java核心面试技术点 线程 单例模式下的线程安全http://blog.sina.com.cn/s/blog_75247c770100yxpb.html map集合 集合数据结构及方法的使用 多线程 线程进程 线程状态 线程状态的改变 sql :临时表、游标、存贮...

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java数据库技术详解 DOC简版

    2.2 DDL操作视图 2.3 本章小结 第3章 SQL语句基础之DML 3.1 SELECT语句基础 3.2 WHERE子句 3.3 ORDER BY子句 3.4 GROUP BY和HAVING子句 3.5 INSERT语句 3.6 UPDATE语句 3.7 DELETE语句 3.8 本章...

    Java2核心技术.part3

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part1

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝性 1. 2.6...

    Java2核心技术.part6

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part4

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part2

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    基于java web技术实现学生成绩管理系统附项目源码+数据库文件+文档说明

    利用Spring实现Java Web技术可以带来许多好处,包括: 1. 简化开发:Spring提供了一系列的模块和工具,可以帮助开发人员更快速、更高效地开发Web应用程序。例如,Spring MVC框架可以帮助开发人员构建Web应用程序的...

    collection-view:Mocha 的集合视图,从 PSTCollectionView 移植

    摩卡系列视图 Mocha 的集合视图是从 iOS 的项目移植而来的。

    演示SDI应用的文档-视图架构模式应用

    本示例是一个SDI示例应用,它包含了CObList集合类、自定义CStudent继承CObject类以实现序列化功能,即把学生对象放到集合中(Java中非常普遍的作法),然后把这个集合对象序列化。注意,自定义类的序列化必须继承...

    学通Java的24堂课

    第1部分 基础篇 第1堂课 java概述 3 ...第21堂课 图形绘制技术 621 第4部分 实战篇 第22堂课 进销存管理系统 647 第23堂课 企业内部通讯管理系统 729 第24堂课 图书馆管理系统 737 附录a java程序编码规范 749

    java核心面试

    map集合 集合数据结构及方法的使用 多线程 线程进程 线程状态 线程状态的改变 sql :临时表、游标、存贮过程、触发机制http://www.cnblogs.com/SkySoot/archive/2012/04/09/2439190.html jvm工作原理 JVM中类的...

    java初学者必看

    1.6 Java技术体系 1.7 Java虚拟机 1.7.1 虚拟机数据类型 1.7.2 Java虚拟机的生命周期 1.7.3 Java虚拟机的体系结构 1.8 垃圾收集器 1.9 本章习题 第2章 Java开发环境 2.1 J2SE的下载和安装 2.1.1 J2SE的下载 ...

    JAVA面试题最全集

    Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都...

Global site tag (gtag.js) - Google Analytics