理清Java集合类(Util包和Concurrent包)

对象的聚集方式 ----集合  ,编程的过程中不可或缺的一把利剑。

这里面体现了编程的理念、数据结构和数据结构之上的算法精髓。


Java的集合框架在Java.Util包下。并发集合框架在concurent包下。

下面是所有类(接口,虚基类,实现类)之间的关系图。自己根据util包内类关系画出来的,画完以后顿时感觉之前乱糟糟的框架关系变得清晰完整起来。


A Collection

理清Java集合类(Util包和Concurrent包)_第1张图片

从设计上来看应该分为  接口继承和类继承。一贯的Java类体系设计风格。

接口体系从Iterable继承而来,说明collection体系类是可以遍历的,都可以返回iterator遍历接口。

但是对于List来说,我们需要可以前后双向遍历。所以AbstractList类以及子类都可以返回ListIterator。

对于实现了Iterator的集合和基本数组都可以使用

for(Element e : list ){}

注意点:

  1 Deque 继承自Queue接口 又封装了栈的基本操作。

   双端队列提供 first 和 last 型的操作方法。所以队列、双端队列、栈的操作都可以实现。

    具体实现是由LinkedList来承担的。

  2 内存结构有两种:连续的数组  和  不连续的链表块

理清Java集合类(Util包和Concurrent包)_第2张图片

   3 Set实现是基于Map的Key集合来实现的。

      TreeSet ---> TreeMap

      HashSet ---->HashMap

      LinkedHashSet --->LinkedHashMap

    4 逻辑结构涉及到了

       顺序列表

       队列  FIFO

        栈  FILO

        hashTable(解决冲突数组)

        树(红黑树)

        堆(数组映射完全二叉树)

   5 呈现形式

        不重复 set

        顺序 List

        Key-Value对 Map

    6 优先队列是采用  逻辑上小根、大根堆来实现的  数据结构上是动态数组

理清Java集合类(Util包和Concurrent包)_第3张图片

     7 Collections 和 Arrays提供了一些排序 查找 并查集、复制等方法


B Map

理清Java集合类(Util包和Concurrent包)_第4张图片

   Map 提供了Key-Value查找方式。

   现将K-V放到一个桶里面再用不同的方式来组合。

   HashMap 将桶放到解决冲突的动态数组里面,利用Key来查找桶的位置。如果冲突就以链表方式挂载,冲突超过8次,就将链表转换为红黑树。

理清Java集合类(Util包和Concurrent包)_第5张图片

       LinkedHashMap在HashMap的基础上又维护一个LinkedList链表,用来保存数据插入或者访问顺序。


       TreeMap是将桶按照Key大小插入到红黑排序树上。


C Concurrent集合类

理清Java集合类(Util包和Concurrent包)_第6张图片

       并发框架对Queue做了很多扩展。可能和系统中队列使用场景的比较多有关。

       注意点:

   1 对于并发框架的阻塞队列 BlockingQueue

 

 

抛出异常

特定值

阻塞

超时

添加元素

add

Offer

Put

Offer(Time

移除元素

Remove

Poll

take

Poll(Time

 检测

Element

peek

 

      可以设想一下该数据集合在生产者消费者模型下的应用:

       生产者 put 如果满了就阻塞掉生产者进程   否则就通知阻塞的消费者

       消费者 take 如果空了 就阻塞掉消费者进程  否则就通知阻塞的生产者

    2 DelayQueue

       超过时间的E出队

    3 其他待续

           

         4  对于Set Map List的扩展

理清Java集合类(Util包和Concurrent包)_第7张图片

        


D  集合框架提供的基本接口方法:

理清Java集合类(Util包和Concurrent包)_第8张图片

理清Java集合类(Util包和Concurrent包)_第9张图片


未完待续(并发框架具体详解和使用场景)


  

你可能感兴趣的:(JAVA基础和提高)