• Java容器之旅:容器基础知识总结


    下图展示了Java容器类库的完备图,包括抽象类和遗留构件(不包括Queue的实现)。

    常用的容器用黑色粗线框表示,点线框表示接口,虚线框表示抽象类,实线框表示类,空心箭头表示实现关系。Produce表示任意的Map对象可以生成Collection对象,任意的Collection对象可以生成Iterator对象。

     

    最后以表格的形式总结List、Set、Map接口及各实现类的特性:

     

     

    特性

    实现类

    实现类特性

    对放置的元素的要求

    List

    线性、有序的存储容器,可通过索引访问元素get(n)

    ArrayList

    数组实现。非同步。

     

    Vector

    类似ArrayList,同步。

     

    LinkedList

    双向链表。非同步。

     

    Set

    元素不能重复,元素必须定义equals()方法

    HashSet

    为快速查找设计的Set

    元素必须定义hashCode()

    TreeSet

    保持次序的Set,底层为树结构

    元素必须实现Comparable接口

    LinkedHashSet

    内部使用链表维护元素的顺序(插入的次序)

    元素必须定义hashCode()

    Map

    保存键值对成员,Map中的所有键必须定义equals()方法

    HashMap

    基于哈希表的 Map 接口的实现,满足通用需求

    键必须有恰当的hashCode(),如果修改了equals方法,需同时修改hashCode方法

    TreeMap

    默认根据自然顺序进行排序,或者根据创建映射时提供的 Comparator进行排序

    键成员要求实现caparable接口,或者使用Comparator构造TreeMap。键成员一般为同一类型。

    LinkedHashMap

    类似于HashMap,但迭代遍历时取得“键值对”的顺序是其插入顺序或者最近最少使用的次序

    与HashMap相同

    IdentityHashMap

    使用==取代equals()对“键值”进行比较的散列映射

    成员通过==判断是否相等

    WeakHashMap

    弱键映射,允许释放映射所指向的对象

     

    ConcurrentHashMap

    线程安全的Map

     

     

    (1)各种Queue和Stack的行为,完全可以LinkedList提供支持,上述表格不包含Queue。

    (2)但凡是和hash相关的,必然会设计到hashCode方法,因为要根据返回的哈希码去计算该对象在哈希表中的位置;但凡是和Tree相关的,必然会设计到Comparable接口,因为要涉及到排序。

    (3)如果要进行大量的随机访问,就是用ArrayList;如果要经常从表中间插入或删除元素,则应该用LinkedList。遍历的时候,对于ArrayList优先选择get方式,LinkedList优先选择iterator方式。

    (4)Collection继承了Iterable接口,故所有的Collection对象都可以使用foreach方式,对元素进行遍历。所有的Collection对象都hiuforeach循环可以与任何实现了Iterable接口的对象一起工作。

  • 相关阅读:
    后台接受ajax传递值的实例代码
    如何动态添加和删除一个div
    模拟实现兼容低版本IE浏览器的原生bind()函数功能
    javascript当文本框获得焦点设置边框
    js实现未知宽高的元素在指定元素中垂直水平居中
    产品图片无缝水平滚动效果代码
    jQuery实现的鼠标滑过切换图片代码实例
    如何实现在密码框如出现提示语
    JS 中 Class
    从网页源代码来找flash播放器腾讯视频源地址
  • 原文地址:https://www.cnblogs.com/tsiangleo/p/4425672.html
Copyright © 2020-2023  润新知