美文网首页
Java集合框架

Java集合框架

作者: xiehb | 来源:发表于2017-10-31 15:25 被阅读0次

    两大基类Collection与Map

    在集合框架的类继承体系中,最顶层有两个接口:

    Collection

    表示一组纯数据

    Map

    表示一组key-value对

    一般继承自CollectionMap的集合类,会提供两个“标准”的构造函数:

    没有参数的构造函数,创建一个空的集合类

    有一个类型与基类(

    Collection

    Map

    )相同的构造函数,创建一个与给定参数具有相同元素的新集合类

    因为接口中不能包含构造函数,所以上面这两个构造函数的约定并不是强制性的,但是在目前的集合框架中,所有继承自CollectionMap的子类都遵循这一约定。

    Collection

    java-collection-hierarchy

    如上图所示,Collection类主要有三个接口:

    Set表示不允许有重复元素的集合(A collection that contains no duplicate elements)

    List表示允许有重复元素的集合(An ordered collection (also known as a sequence))

    QueueJDK1.5新增,与上面两个集合类主要是的区分在于

    Queue主要用于存储数据,而不是处理数据。(A collection designed for holding elements prior to processing.)

    在处理元素前用于保存元素的 collection。除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

    Map

    MapClassHierarchy

    public interface Map<K,V>

    将键映射到值得对象,一个映射不能包含重复的键;每个键最多只能映射到一个值。

    map接口提供三种collection视图,允许以键集、值集或 键-值映射关系集的形式查看某个映射的内容。

    附:几种Java集合框架,参考http://blog.csdn.net/chszs/article/details/50518724

    1、fastutil

    fastutil是一个开源的Java集合框架的扩展,它继承了Java Collection Framework,提供了数种特定类型的容器,包括映射map、集合set、列表list、优先级队列(prority queue),实现了java.util包的标准接口(还提供了标准类所没有的双向迭代器),还提供了很大的(64位)的array、set、list,以及快速、实用的二进制或文本文件的I/O操作类。
    fastutil为专用的集合类提供了大容量的功能,而且类比普通Java集合类显得更紧凑、速度更快。
    除了对象和原始类型,fastutil类还提供了对引用的支持,也即对象是可以使用等号操作符进行比较的,无需使用equals()方法。
    fastutil以Apache 2.0许可证发布。使用它需要JDK 7以上版本。

    fastutil以JAR包的方式提供,要注意这个JAR包文件比较大,因为它包含了大量的类文件。如果你只想要fastutil的一部分,那么应该考虑实用AutoJar之类的根据来自动提取所需的类。

    官网地址: http://fastutil.di.unimi.it/

    fastutil目前的最新版本为7.0.10版,这个最新的JAR包fastutil-7.0.10.jar大小为17MB。其Maven依赖为:

    <dependency>
        <groupId>it.unimi.dsi</groupId>
        <artifactId>fastutil</artifactId>
        <version>7.0.10</version>
    </dependency>
    

    fastutil的在线API文档见:http://fastutil.di.unimi.it/docs/

    fastutil 6在大数据方面进行了增强,提供了一套新的类集合使得可以处理很大的集合,尤其是当集合数据超过2GB(2^31)时。比如Hash Big Set仅仅受内存大小的限制。

    2、HPPC

    官网地址: http://labs.carrotsearch.com/hppc.html
    官网地址: https://github.com/carrotsearch/hppc
    HPPC即High Performance Primitive Collections for Java,对Java的原始集合类型如映射map、集合set、堆栈stack、列表list、队列deque等进行了扩展,提供了更佳的内存利用率,带来了更好的性能。
    HPPC当前的最新版本为0.7.1

    3、Trove

    官网地址: http://trove.starlight-systems.com/
    Trove库提供了高速的Java集合类。

    GNU Trove库有两个目标:
    1)提供一个免费、高速、轻量级的java.util集合API的实现。
    这些实现被设计成可插拨的方式,以便替代标准JDK的集合类。
    2)提供原始的集合,API风格保持一致。
    标准JDK使用包装器类来封装原始类型,比如java.lang.Integer,java.lang.Float等,那么标准集合类也使用了包装后的类型。而对于Trove库来说,集合直接存储原始类型可以减少空间的使用量,并能带来显著的性能提升。

    GNU Trove库既可以用于服务器端应用,也可以用于客户端应用,它消耗的内存比标准集合框架更少。
    GNU Trove库目前的最新版本为3.0.3版,很成熟的一个库。
    应注意,Trove已经很久没更新了,此项目可以不予考虑。

    4、Mahout Collections

    官网地址: https://mahout.apache.org/users/basics/mahout-collections.html

    Mahout Collections库是一套容器类集合,它致力于解决标准Java集合框架的一些限制。Mahout Collections主要解决两方面的问题:
    1)Java标准集合框架缺乏对原始类型的支持
    2)Java标准集合框架缺乏对open hashing的支持

    相关文章

      网友评论

          本文标题:Java集合框架

          本文链接:https://www.haomeiwen.com/subject/gpebpxtx.html