zoukankan      html  css  js  c++  java
  • Java 集合类详解

    Java 集合类详解

     

    0.参考文献

    http://blog.csdn.net/liulin_good/article/details/6213815

    1.java集合类图

    1.1

    1.2

      上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。

      发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。也就是说如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。

      还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作流昂大大降低。

    1.3

    2.详解

     2.1HashSet

    HashSet是Set接口的一个子类,主要的特点是:里面不能存放重复元素,而且采用散列的存储方法,所以没有顺序。这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致。

    代码实例:HashSetDemo

    View Code

    代码实例:SetTest

    View Code

    2.2ArrayList

    ArrayList是List的子类,它和HashSet想法,允许存放重复元素,因此有序。集合中元素被访问的顺序取决于集合的类型。如果对ArrayList进行访问,迭代器将从索引0开始,每迭代一次,索引值加1。然而,如果访问HashSet中的元素,每个元素将会按照某种随机的次序出现。虽然可以确定在迭代过程中能够遍历到集合中的所有元素,但却无法预知元素被访问的次序。

    代码实例:ArrayListDemo

    View Code

    2.3 ListIterator

    ListIterator是一种可以在任何位置进行高效地插入和删除操作的有序序列。

    代码实例:LinkedListTest

    View Code

     2.4HashMap

    参考之前的一篇博客:Hashmap实现原理

     2.5WeekHashMapDemo

    View Code

    输出结果

    View Code

     疑问:为什么value没有被回收。

    3.比较

        是否有序 是否允许元素重复
    Collection
    List
    Set AbstractSet
      HashSet
      TreeSet 是(用二叉排序树)
    Map AbstractMap 使用key-value来映射和存储数据,key必须唯一,value可以重复
      HashMap
      TreeMap 是(用二叉排序树)
    作者:xwdreamer
    欢迎任何形式的转载,但请务必注明出处。
  • 相关阅读:
    heartbeat 心跳技术
    国产数据库有哪些?
    Redis(1.9)Redis主从复制
    Redis(1.8)Redis与mysql的数据库同步(缓存穿透与缓存雪崩)
    分布式系统/NoSQL
    Redis(1.7)Redis高可用架构与数据库交互(理论篇)
    Redis(1.6)Redis发布订阅
    Redis(1.5)Redis配置文件(4.0.14)
    (5.3.4)数据库迁移——数据对比(结构、数据类型)
    【基本优化实践】【1.5】如何在线稳定的删除/更新大量数据?
  • 原文地址:https://www.cnblogs.com/eryun/p/10063924.html
Copyright © 2011-2022 走看看