• Java中的容器


    在书写程序的时候,我们常常需要对大量的对象引用进行管理。为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中。

    由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都要能能提供方便的查询、遍历、修改等基本接口功能。

    早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护。

    但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降。

    为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求。

    JAVA的容器---List,Map,Set 
    Collection 
    ├List 
    │├LinkedList 
    │├ArrayList 
    │└Vector 
    │ └Stack 
    └Set 
    Map 
    ├Hashtable 
    ├HashMap 
    └WeakHashMap

    !其中的Vector和Stack类现在已经极少使用。

    从容器类图中可以发现,数据容器主要分为了两类:

    Collection: 存放独立元素的序列。

    Map:存放key-value型的元素对。(这对于一些需要利用key查找value的程序十分的重要!)

    从类体系图中可以看出,Collection定义了Collection类型数据的最基本、最共性的功能接口,而List对该接口进行了拓展。

    其中各个类的适用场景有很大的差别,在使用时,应该根据需要灵活的进行选择。此处介绍最为常用的四个容器:

    LinkedList :其数据结构采用的是链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。

    ArrayList:其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。

    HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。

    HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。

    该类图的理解,对于灵活的使用相应的数据容器十分的重要。

    根据Oracle公司的官方文档:

    1、Collection是对Iterable接口的拓展故所有的Collection对象都可以使用foreach方式,对元素进行方便的遍历。

    由于Iterable接口中定义了的唯一方法为:返回一个Iterator对象,故所有的Collection都可以用 对象名.iterator()的方式获取该collection的迭代器iterator对象(结合工厂方法和内部类的思想来理解,其作用十分大)

    2、Map中提供了产生Collection的方法,以支持方便的对键值对的值域进行操作。

    Collection<V> values()   Returns:a collection view of the values contained in this map.

     

    从JAVA提供的数据容器来看,可以清晰的认识到面向对象的思想在类的架构设计中的重要性。

    灵活的使用好各类容器类,以最大限度的提升程序的性能。由于类型过多,大多的基础操作都被抽象到了Collection中,熟练并利用好Collection提供的接口,已经可以解决大量的问题(即使是Map,其也提供了产生Collection对象的机制)。

     

    Example:

    public class TestContainer {
    Collection<String> testList= new ArrayList<String>(Arrays.asList("i love you".split(" ")));
    Map<Integer, String> testMap=new HashMap<Integer, String>();

    TestContainer()
    {
    testMap.put(1, "I");
    testMap.put(2, "love");
    testMap.put(3, "you");


    print(testMap);
    print(testList);

    print("Using Iterable Interface");
    for(String str:testList)
    {
    print(str);
    }

    print("Geting the values collection of a Map");
    Collection<String> mapValues= testMap.values();
    for(String str:mapValues)
    {
    print(str);
    }

    print("Geting the Iterator of a collection");
    Iterator i=mapValues.iterator();
    while(i.hasNext())
    {
    print(i.next());
    }
    }
    }

     以上的例子中,TestContainer的实例会有连个数据成员:

    1、ArrayList<String>     testList

    2、Map<Integer, String>   testMap

    为了对ArrayList进行遍历,此例中直接将ArrayList向上转型为了Collection类型(结合类图),并利用foreach遍历方式对其中的成员进行了遍历。

    为了对Map中的value域进行访问,此处调用了Collection<String> mapValues= testMap.values(); ,使用Map的values()方法返回了其value成员的Collection对象。

    于是可以像操纵其它Collection一样,对该集合进行操作!

  • 相关阅读:
    php 中 return exit break contiue 详解
    C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型
    asp.net 生成xml文件 与 asp生成xml文件
    android 性能优化
    Internet基础
    华为一道机试
    智能家居趋势
    hdu4708 Rotation Lock Puzzle
    java要在命令行执行eclipse的项目的方法
    linux和windows下安装python拓展包及requirement.txt安装类库
  • 原文地址:https://www.cnblogs.com/airwindow/p/2560196.html
Copyright © 2020-2023  润新知