Java多线程技术8——并发集合框架

1 集合框架结构

        Java中的集合框架父接口是Iterable,从这个接口向下一一继承就可以得到完整的Java集合框架结构。集合框架的继承与实现关系相当复杂,简化的集合框架接口结构如下图:

21d9f46cfb684dea9e3958fe5edbc8ac.jpeg

        可以发现,出现了3个继承分支(List,Set,Queue)的结构是接口Collection,它是集合框架主要功能的抽象。另一个接口是Iterable。

2 Iterable接口

        Iterable接口的主要作用是迭代循环,接口结构声明如下图:

15279b4331774024834fb012abedfaa1.png

        Iterable接口结构非常简洁,其中包含方法iterator(),通过这个方法返回Itreator对象,已进行循环处理。

3 Collection接口

        Collection接口提供了集合框架最主要、最常用的操作,结构如下图:

1a28a8e825e14d329b6aa10cf589c0bd.png

4 List接口

        List接口对Collection进行了扩展,允许根据索引位置操作数据,并且允许内容重复,List接口的结构如下图:

 a4e652a9da6146a798a52dc53ac1eeb1.png

        List接口最常用的非并发实现类时ArrayList,它是非线程安全的,可以对数据以链表的形式进行组织,使数据呈现有序的效果。

        由于ArrayList类不是线程安全的,如果想使用线程安全的链表则可以使用Vector类,其结构如下图:

5c712ad1a9b8408fa70898d17e00e89e.png

        Vector是线程安全的,所以在多线程并发操作数据时可以无误地处理集合中的数据。需要说明一下,多个线程分别调用Vector的iterator()方法返回Iterator对象,再掉能用remove()时会出现异常,也就是说并不支持Iterator并发删除,所以该类在功能上还是有缺陷的。

5 Set接口 

         Set接口也是对Collection进行了扩展,特点是不允许内容重复,排序方式为自然排序。其防止元素重复的原理是元素需要重写hashcode和equal两个方法,结构声明如下图:

130f9a086b5a48a1bcb4673c606cf383.png

        Set接口最常用的非并发实现类是HashSet。HashSet默认以无序的方式组织元素,LinkedHashSet类可以有序地组织元素。Set接口还有另外一个实现类,TreeSet。它不仅实现了Set接口,还实现了SortedSet和NavigableSet。

6 Queue接口

        Queue接口对Collection进行了扩展。它可以方便地操作列头,结构声明如下图:

fb191457a8114f6aa0c1bdb97d0fdfba.png

        Queue接口的非并发实现类有PriorityQueue,它是一个基于优先级的无界优先级队列。

7 Deque接口

        Queue接口是对表头的操作,Deque不仅支持对表头的操作,还支持对表尾的操作,所以Deque全称“Double Ended Queue "(双端队列)。其结构如下:

9b815ce7b195410889a3a7a49d266c7e.png

        Deque接口的非并发实现类有ArrayDeque和LinkedList。它们之间有一些区别:如果只想从队列两端获取数据,使用ArrayDeque;如果想从队列两端获取数据的同时还可以根据索引的位置操作数据,则使用LinkedList。

 

 

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geminigoth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值