`
王星游
  • 浏览: 5008 次
文章分类
社区版块
存档分类
最新评论

java集合框架印象

    博客分类:
  • java
 
阅读更多

 

http://docs.oracle.com/javase/6/docs/technotes/guides/collections/overview.html

集合框架层次上比较复杂,网上有无数文字和图片来说明,这里按我的思路整理了一下:

省略了AbstractCollection,AbstractList等层次的抽象类

省略了RoleList等javax包中的应用方向的实现

省略了Vector,Stack,HashTable这些著名的老家伙。

按照我的一般认识进行归类,例如LinkedList同时实现了Deque和List,这里归入List中;再例如Deque本应继承自Queue,但这里放在同一个级别上。

一切都是为了尽可能建立一个较清晰的第一印象,知道该在什么场景下使用什么类。

-------------------------------------------------

Collection 集合接口(传统包util)

Queue 队列

PriorityQueue 无界优先级队列

Deque 双端队列

ArrayDeque 基于数组的无界双端队列,做队列和栈都很合适

List 有序集合

ArrayList 基于数组的有序集合

LinkedList 基于链表的有序结合(其实也是一个Deque)

Set

EnumSet 枚举专用的set,效率高

HashSet 基本的快速哈希Set,基于HashMap

LinkedHashSet 附加了链表的哈希Set,插入慢,迭代快,有序

TreeSet 插入时就维持顺序,基于TreeMap实现,可快速获取子集

 

总结:

栈和队列,用ArrayDeque或者linkedList(各有千秋);其余类的适应范围都比较明确。

-------------------------------------------------

Collection 集合接口(并发包concurrent)

Queue 队列

ConcurrentLinkedQueue 基于链接节点的无界线程安全队列

BlockingQueue 阻塞队列

ArrayBlockingQueue 基于数组的有界阻塞队列

DelayQueue 无界阻塞队列,只有在延迟期满时才能从中提取元素

LinkedBlockingQueue 基于链表的无界阻塞队列

PriorityBlockingQueue 带优先级的无界阻塞队列

SynchronousQueue 无容量的同步队列,两个线程插入与移除交替进行

Deque 双端队列

BlockingDeque 阻塞双端队列

LinkedBlockingDeque 基于链表的阻塞双端队列

List 有序集合

CopyOnWriteArrayList 可变操作通过底层复制来实现,适合多读取,少修改

Set

ConcurrentSkipListSet 多线程可以安全地发执行各种操作,迭代器弱一致

CopyOnWriteArraySet 可变操作通过底层复制来实现,适合多读取,少修改

总结:

1,ConcurrentLinkedQueue与LinkedBlockingQueue:

http://www.javacodegeeks.com/2010/09/java-best-practices-queue-battle-and.html#ixzz1seaiSLwp

如果生产者与消费者的关系是“多对多”,选LinkedBlockingQueue(阻塞方式)要快很多,代价是迭代遍历的效率奇低。

如果生产者与消费者的关系是“一对多”或者“多对一”,选ConcurrentLinkedQueue(无等待方式)会有一定性能提升。

2,ArrayBlockingQueue比LinkedBlockingQueue的表现更稳定和更可预测,但是后者的吞吐量往往更高。

3,List:

CopyOnWriteArrayList貌似只适合“多读取,少写入”的场景,其余情况还是乖乖的Collections.synchronizedList()吧。

4,Set:

ConcurrentSkipListSet可以当作并发版的TreeSet。

CopyOnWriteArraySet可以当作并发版的linkedHashSet,适合多读取,少修改。

奇怪的是java没有提供ConcurrentHashSet,按理说基于ConcurrentHashMap可以实现的。

读写都频繁的同步Set只能凑合了,用ConcurrentSkipListSet可能比synchronizedSet要强?

http://dhruba.name/2009/08/05/concurrent-set-implementations-in-java-6/

按上面的链接说法,可以试试这个:

Collections.newSetFromMap(new ConcurrentHashMap<Object,Boolean>())

Use this when you have large sets, a good (and fast) hash function and can estimate the set size and needed concurrency before creating the map.

-------------------------------------------------

Map 映射接口 (传统包util)

EnumMap 枚举专用的map,效率高

HashMap 基本的快速哈希表

LinkedHashMap 附加了链表的哈希表,插入慢,迭代快,有序

IdentityHashMap 实现中用“==”运算代替“equals()”作为判断键和值是否相等

TreeMap 基于红黑树,插入时就维持顺序,可快速获取子集

WeakHashMap 以“弱键”实现,其中的键可能会被垃圾回收,导致此映射被移除

-------------------------------------------------

Map 映射接口 (并发包concurrent)

ConcurrentMap

ConcurrentHashMap

ConcurrentSkipListMap

总结:

ConcurrentHashMap可以当作并发版的HashMap

ConcurrentSkipListMap可以当作并发版的TreeMap

-------------------------------------------------

How to choose which Java collection class to use?

http://www.javamex.com/tutorials/collections/how_to_choose_2.shtml

the Queue interface

http://www.javamex.com/tutorials/synchronization_concurrency_8_queues_2.shtml

-------------------------------------------------

吐槽:不知道“基于数组的无界双端队列”这句话中的“无界”会不会被敏感掉,想起了“十六嘴交换机”的故事。

分享到:
评论

相关推荐

    java基础完整版印象笔记

    5. **集合框架**:包括List、Set、Map接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等,以及它们的使用场景和操作方法。 6. **输入/输出流**:理解I/O流的概念,学习FileInputStream、...

    java源代码:220个JAVA初学者实例集合

    5. **集合框架**:介绍ArrayList、LinkedList、HashSet、HashMap等常用集合类,以及它们的增删查改操作和遍历方法。 6. **IO流**:包括文件操作、字节流、字符流、缓冲流、对象序列化等,了解输入输出的基本原理。 ...

    java入门经典(完整版高清晰带目录书签)

    5. **集合框架**:Java集合框架提供了多种数据结构来存储数据,如List、Set、Map等,这方便了数据管理及操作。 6. **Java I/O**:输入输出(I/O)是程序与外界进行交互的重要手段,Java中的I/O流用于处理各种数据的...

    thinking in java(v.4)

    此外,书中对Java集合框架的深入讲解也给读者留下了深刻的印象。 从这些评论中我们可以提炼出《Thinking in Java》第四版所包含的知识点,以及它的特点和优势: 1. 面向对象编程(OOP)原则:《Thinking in Java》...

    CoreJava串讲---超好!

    6. **集合框架**:Java集合框架包括List、Set、Queue和Map四大接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。熟练运用集合框架可以有效地组织和操作数据。 7. **IO流**:Java的IO流提供了读写文件、...

    值得借鉴的13个优秀java简历

    - Java核心技术:列出掌握的Java核心概念,如面向对象编程、多线程、集合框架(List、Set、Map)、异常处理、IO流、反射、设计模式等。 - 框架经验:提及熟悉或精通的Java Web框架,如Spring Boot、Spring MVC、...

    java面试题大全

    Java基础知识包括但不限于数据类型、控制结构、面向对象编程、异常处理、集合框架、线程、网络编程等。深入理解并熟练掌握这些概念,能够在面试中展现出扎实的技术功底。 ### 实战经验 除了理论知识,实战经验也是...

    基于java的leetcode刷题与复习指南算法模板代码

    这个基于Java的LeetCode刷题与复习指南算法模板代码集合,将为学习者提供宝贵的资源和起点。 首先,让我们深入理解Java在LeetCode中的应用。Java是一种广泛使用的面向对象的编程语言,其语法清晰,性能优秀,特别...

    java面试2022面试宝典和简历模板

    3. **集合框架**:掌握ArrayList、LinkedList、HashSet、HashMap等集合类的特性和使用场景,以及它们之间的关系和转换。面试中可能会涉及并发集合如ConcurrentHashMap、CopyOnWriteArrayList等。 4. **异常处理**:...

    java 练单词

    最后,Java的单词并不仅仅局限于语法层面,还包括其丰富的类库和框架,如集合框架(ArrayList、HashMap等)、IO流、多线程、网络编程等。熟练掌握这些词汇意味着能够有效地利用Java的强大功能解决问题。 总结起来,...

    java大学实用教程

    9. **集合框架**:Java集合框架包括List、Set、Queue等接口和ArrayList、LinkedList、HashSet、HashMap等实现类,提供了存储和操作对象的高效工具。 10. **输入/输出流**:Java的I/O流系统允许程序进行数据的读写...

    thinking in java 4 English version

    《Thinking in Java》第四版英文版是一本广受Java程序员欢迎的学习材料,它被推荐给每一个想要深入...从集合框架的讲解到多线程编程的高级特性,本书都提供了详尽的讲解和示例,帮助程序员们构建起坚实的Java编程基础。

    Java SE 001 Java SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行(视频)

    Java SE,全称为Java Standard Edition,是Java平台的核心版本,主要面向桌面应用和...通过不断的练习和学习,你将能够掌握更高级的Java特性,如异常处理、多线程、集合框架、I/O流等,从而成为一名熟练的Java开发者。

    java基础详细视频rar

    8. **集合框架**:Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。理解它们的特点和用法对于处理数据至关重要。 9. **输入输出流**:Java的IO流用于读写文件...

    Java面试指南_JAVA.pdf

    本文档重点介绍了Java后端技术面试相关的知识点,涵盖基本概念、集合框架、多线程、同步机制等。 ##### 1. Core Java基础 这一部分涵盖Java基础知识,包括但不限于API解读、异常处理、集合框架、多线程同步机制等。...

    自考机试Java语言程序设计考试题及答案。

    3. **数组与集合**:Java中的数组和集合框架是处理数据的重要工具。数组的使用、多维数组以及集合(如ArrayList、LinkedList、HashSet、HashMap等)的创建、添加、删除和遍历操作是机试中的常见题目。 4. **异常...

    Java Guide 面试突击版

    此外,指南还涉及集合框架,如ArrayList、LinkedList、HashMap等数据结构的特点和使用场景,以及并发编程相关的知识。 综上所述,Java Guide 面试突击版是一份全面的Java面试准备资料,它不仅包含了面试技巧和简历...

    java2认证指南

    这通常包括Java基础语法、面向对象编程、异常处理、多线程、输入/输出(I/O)系统、集合框架、网络编程以及数据库连接等。这些知识点构成了Java开发的基本功,也是任何Java程序员必备的技能。 在描述中提到,“用心去...

    java语言结构初步

    10. **集合框架**:Java集合框架包括List、Set、Map等接口和ArrayList、HashSet、HashMap等实现类,提供了存储和操作对象的强大工具。 11. **多线程**:Java内置对多线程的支持,通过Thread类或实现Runnable接口...

Global site tag (gtag.js) - Google Analytics