JDK源码阅读(6)、常用集合间的关系

看了些源码了,该把这个集合间的关系缕清了。祭出网上流传已久的java集合关系类图

一、集合关系类图


二、相关的接口和类

    1.Iterable接口  :进行集合中数据的遍历。
 Iterator<T> iterator();//生成集合数据对应的迭代器
    /**
        从jdk1.8开始出现的接口,在集合中元素遍历过程中
        进行一些自定义操作
    */
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    /**
    Spliterator(splitable iterator可分割迭代器)接口是Java为了并行遍历数据源中的元素而设计的迭代器
    */
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }    
         1.1 ListIterator,继承自Iterable接口。  

 作用:(1)允许我们向前、向后两个方向遍历 List。  
          (2)在遍历时修改 List 的元素  
          (3)遍历时获取迭代器当前游标所在位置  
   这个接口一般用于集合元素有序情况下的迭代。

   List的所有子类都实现了这个接口

2.Collection接口

     它是Queue、List、Set接口的父接口,同时继承自Iterable接口。声明了集合需要的各种基本方法。

       2.1 List接口, List接口继承自Collection。存储的是一系列可以重复的按照顺序排列的数据元素的集合

                它派生出来的两个常用子类  
                        LinkedList:数据通过链表形式连接起来的元素集合
                        ArrayList: 通过数组的形式存储元素的集合。  
                         两者的区别:LinkedList对于元素的增删较为方便,ArrayList对于集合的随机访问比较方便。  
                        所以随机访问频繁用ArrayList,增删频繁使用LinkedList  
                另外 LinkedList还是Queue接口的实现类。

              List还有另外一个子类->Vector :类似于ArrayList,都适合于元素的随机存储。但是ArrayList的非线程安全的,Vector是线程安全的。Vector的效率更低。

      2.2  Queue接口  

             继承自Collection接口,是一个队列,满足先进先出的原则。LinkedList是它的一个实现。

      2.3 Set接口  
             存储一系列不可以重复的元素集合。
             HashSet Set接口的实现类之一,底层是HashMap,存储的元素都是无序的。
             LinkedHashSet  继承自HashSet,底层是LinkedHashMap,存储的元素是按照插入的顺序,
             SortedSet 排列有序Set的集合

                     TreeSet  SortedSet的实现类,底层是TreeMap,TreeMap的底层是通过红黑树来实现元素顺序的排列。

 3.Map接口

         存放Key,Value键值对的集合。

         用于存储Key Value键值对的元素的集合。
    它的实现类 
        HashMap:内部通过数组+链表的方式存储数据,便于数据的快速存储。
        LinkedHashMap:继承自HashMap,满足HashMap的特性,并且元素可以按照插入顺序读取出来。
        SortedMap: 抽象类,要求内部的元素都是有序排列

                TreeMap:SortedMap的实现类,内部采用红黑树进行元素按序存储

 4、AbstractList、AbstractMap、AbstractSet

             对应于List、Map、Set的抽象实现,内部实现了通用的集合操作。这样其他具体的非抽象类就可以只关注需要修改或添加的方法实现即可,上面的具体实现类都继承了这个抽象类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值