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

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

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


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

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


A Collection


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

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

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

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

for(Element e : list ){}

注意点:

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

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

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

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


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

      TreeSet ---> TreeMap

      HashSet ---->HashMap

      LinkedHashSet --->LinkedHashMap

    4 逻辑结构涉及到了

       顺序列表

       队列  FIFO

        栈  FILO

        hashTable(解决冲突数组)

        树(红黑树)

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

   5 呈现形式

        不重复 set

        顺序 List

        Key-Value对 Map

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


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


B Map


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

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

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


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


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


C Concurrent集合类


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

       注意点:

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

 

 

抛出异常

特定值

阻塞

超时

添加元素

add

Offer

Put

Offer(Time

移除元素

Remove

Poll

take

Poll(Time

 检测

Element

peek

 

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

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

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

    2 DelayQueue

       超过时间的E出队

    3 其他待续

           

         4  对于Set Map List的扩展


        


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




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


  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值