`
hbkh2000
  • 浏览: 205252 次
  • 性别: 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  
不错的文章,加油

相关推荐

    Java集合框架使用总结

    ### Java集合框架使用总结 #### 一、概述 在Java编程中,集合框架是一个非常重要的概念,它提供了标准的方式来存储和操作数据集合。Java集合框架的设计原则是将数据结构抽象成一组接口,再通过不同的实现类来具体...

    Java集合框架培训资料

    10. **不可变集合**:`Collections.unmodifiable*()`方法可以创建只读的集合视图,防止修改原始集合。`Collections.emptyList()`, `Collections.emptyMap()`等工厂方法提供了空集合实例。 在实际开发中,理解并熟练...

    java集合与通用集合

    Java集合与通用集合是Java编程中的重要组成部分,主要用于存储和管理对象。集合框架自Java 1.2引入以来,已经成为Java开发中不可或缺的工具。在Java高级编程中,理解并熟练掌握集合的使用至关重要。 首先,集合框架...

    java不同对象及集合的多次复制

    在Java编程中,对象复制是一项常见的任务,特别是在处理模型(Model)和视图对象(VO)时。模型对象通常用于封装业务数据,而视图对象则用于展示这些数据。值复制,即对象属性值的复制,是保持数据一致性和简化代码...

    544个JAVA技术集合.txt

    5. **集合框架**:Java集合框架包括接口(如List、Set、Map)和实现类(如ArrayList、LinkedList、HashSet、HashMap等),用于存储和操作对象。 6. **IO流**:Java的IO流用于读写文件、网络通信等,分为字节流和...

    Java集合排序及java集合类详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。这个框架包括了Collection、List、Set和Map四大接口,以及它们的各种实现类。了解和掌握这些概念对于任何Java开发者来说...

    java集合框架java集合框架.doc

    Java集合框架是Java编程语言中的一个核心组件,它为存储、管理和操作对象提供了一套统一的接口和类。集合框架使得开发者可以更加高效地处理数据,而无需关注底层的实现细节。本文将深入探讨Java集合框架的主要组成...

    Java集合类总结

    ### Java集合类总结 #### 一、概述 Java集合类框架是Java标准库的一个重要组成部分,主要用于存储和处理数据集合。这些集合类被定义在`java.util`包中,为开发者提供了灵活的数据结构来实现各种应用程序的需求。...

    java web 开发技术开发技术

    Java Web开发技术是现代互联网应用开发的重要组成部分,它基于Java平台,主要涵盖了J2EE(Java 2 Platform, Enterprise Edition)框架,用于构建分布式、多层的企业级应用程序。本教程将深入讲解Java技术在Web开发中...

    JAVA技术合集(CHM)

    Struts提供了动作调度、表单验证、国际化等功能,并且与各种视图技术如JSP、FreeMarker等良好集成。理解Struts的配置、拦截器、Action和结果映射等概念,是掌握企业级JAVA开发的关键。 JSF(JavaServer Faces)是另...

    Java集合知识图谱 ,包含map,list,set

    “2.4 Java集合类图.jpg”可能包含了以上所有接口和类的综合视图,同时可能还包括了一些高级主题,如Queue、Deque、PriorityQueue等。 理解Java集合框架的关键在于掌握每个接口的特点和其实现类的性能特征。在实际...

    30 个 Java 集合面试问题及答案.docx

    虽然Map提供了一些方法可以获取key或value的集合视图,但这些视图仍然是基于Map的特定结构,而不是简单的元素集合。 Iterator接口是用于遍历集合的工具,它可以安全地在迭代过程中移除元素。相比于Enumeration,...

    Tedu一段Java集合Collection

    根据给定的信息,本文将详细解析“Tedu一段Java集合Collection”的知识点,涵盖集合的基本概念、集合框架中的关键接口、`Collection`接口的核心方法、集合的遍历方式、泛型的应用以及集合与数组之间的相互转换。...

    Java Map 集合类简介

    【Java Map 集合类简介】 在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别...

    JAVA框架核心技术笔记

    此外,异常处理、垃圾回收机制、集合框架、IO流、多线程和网络编程也是Java开发者必须掌握的关键知识点。这些基础知识构成了Java程序员的基石,为理解和应用更复杂的框架打下了坚实的基础。 在Java框架方面,Spring...

    集合框架源码分析

    `Collections.unmodifiable*()`方法可以创建只读的集合视图,防止对集合的修改。`Collections.empty*()`则提供空集合的实例。 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; ...

Global site tag (gtag.js) - Google Analytics