`
hbkh2000
  • 浏览: 199125 次
  • 性别: 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 本章...

    Java Eclipse ee集合jetty和配置

    Eclipse EE 集合 Jetty 和配置 Eclipse 是一个功能强大且流行的集成开发环境(Integrated Development Environment,IDE),提供了许多插件和工具来支持各种编程语言和技术。其中,Eclipse EE(Enterprise Edition...

    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应用程序的...

    java软件开发求职试题集合.pdf

    "java软件开发求职试题集合.pdf" 这份文件集合了Java软件开发领域中的多个问题,涵盖了Java基础知识、算法、数据结构、设计模式、Web开发、数据库等方面。下面是对每个问题的详细解释: 1. try-catch-finally语句...

    Java课程设计实现停车场管理-源代码.docx

    6. Java集合框架:本资源使用了Java集合框架来实现停车场管理系统,包括了ArrayList、LinkedList等集合类型。 7. 时间类:本资源使用了Java的时间类来实现时间相关的操作,包括了日期、小时、分钟、秒等时间单位。 ...

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

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

    Java 面试题 word文档

    本文档提供了 Java 面试题大全,涵盖了 Java 基础知识、JSP&Servlet 技术、J2EE 相关知识、其他相关知识等多个方面。通过本文档,读者可以了解 Java 的基础知识、Web 开发技术、企业级应用开发等多个方面的知识点。 ...

    java实习报告范文3000字.doc

    通过实习,掌握java开发的相关知识,掌握java开发的根本技术,丰富java开发的实战经历。学习SQL的根底知识及正确的运用方法,和有用的相关技术,提高自己的工作效率。 实习主要流程 1. 公司管理规那么,程序员素质...

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

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

Global site tag (gtag.js) - Google Analytics