`
ywskin
  • 浏览: 2401 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JAVA集合分析概述

    博客分类:
  • JAVA
阅读更多

       前段时间在QQ空间写了篇关于JAVA集合分析的日志,现搬到这里与大家分享。 其中有链接可查看各种集合的具体介绍。

http://user.qzone.qq.com/396768440/blog/1359132442

 

 最基本的数据结构有数组、链表2种。
        1)数组的长度是固定的,容量是有限的(除非扩容)。可以用索引访问,因此访问速度比较快。
        2)链表中每个节点指向下一个节点,容量是无限的(不作限制且不考虑硬件)。访问链表中的任一节点需要遍历链,因此访问速度比较慢。
        
        JAVA集合内部使用这2种结构中的1种或2种来保存数据,基本接口有:Map和Collection。Collection下有List、Queue、Set这3个接口。

  • Map用于保存多个键值对,键不能重复。其中部分实现类(线程安全、key有序、key枚举)的键不能为空。
  • Collection用于保存一组对象,分为3种接口。
    • List列表,对象可重复、可空。
    • Queue队列,对象可重复、不能空,添加一些操作方法。
    • Set对象不能重复。
        类图如下,其中圆表示接口、方形表示类,斜体描述的方形表示抽象类,蓝色边框表示JDK1.5以后出现的。


Map 
图片
图1.1:Map类图
实现类
HashMap
: 最常用的Map,线程不安全,没有多线程同时访问的情况,使用HashMap效率最高。内部使用数组保存节点,数组中的元素可为空,也可为链表。
LinkedHashMap:保存了插入顺序,用Iterator遍历时,按插入时的顺序返回。是HashMap的子类,并用双向链表将节点按进入顺序连接。
TreeMap:key是有序的,纯种不安全,使用红黑树保存节点。
ConcurrentHashMap:线程安全,不是锁整个Map对象,而使用ReentrantLock锁相应的segment,效率比Hashtable高。
ConcurrentSkipListMap:key是有序的,适合多线程的高并发。用有序的链保存数据,为节点建立N层索引,定位节点类似二分查找法。
Hashtable:线程安全,put、get、remove方法用synchronized锁住整个对象,效率比较低。
EnumMap:key是枚举值。 

WeakHashMap:key在外部没有引用时,该key的键值可被GC回收。
IdentityHashMap:判断key值相等时,用key1==key2判断,而不是equals。所以key可以是值相等的不同对象。
Properties:主要用于读取properties或XML配置文件,线程安全。
名称
数据结构
线程安全
 key有序 
 key可空 
  明细  
 HashMap
 数组+链表(hash表)
 LinkedHashMap
 数组+链表
 TreeMap
 链(红黑树)
 ConcurrentHashMap
 数组+数组+链表(分段hash表)  
 是 
 ReentrantLock  
 ConcurrentSkipListMap 
 链表+索引链(跳表)
CAS
 Hashtable
 数组+链表
 synchronized  
 EnumMap
 数组+数组
 WeakHashMap
 数组+链表
 IdentityHashMap
 数组+链表
表1.1 各种Map比较

List 、Queue

 
图片
图1.2:List、Queue类图 
接口
List:列表接口
        1)add:添加元素。
        2)remove:删除指定元素。
        3)get:返回指定元素。
Queue:所有队列的接口
        1)add:添加元素到队列,如果没有空间则抛出异常。
        2)remove:从队列中删除元素。
        3)poll:取走头元素,如果队列为空,则返回null。
        4)peek:返回头元素,如果队列为空,则返回null。
        5)element:返回头元素,如果队列为空,则抛出异常。
BlockingQueue:可阻塞队列的接口
        1)add:添加元素到队列,如果没有空间则抛出异常。
        2)put:添加元素到队列,如果没有空间则阻塞等待直到有空间。
        3)take:取走头元素,如果队列为空,则阻塞等待直到有元素。
        4)poll :取走头元素,如果队列为空,则在超时时长范围内阻塞等待,超时后仍未取到则返回null。


实现类
ArrayList
:最常用的List,线程不安全,内部是数组结构。
CopyOnWriteArrayList:线程安全,修改(add、remove)数组将复制一个新的数组来修改再设置回去,适合读远多于写。
LinkedList:线程不安全,内部是链表结构。
Vector:线程安全,用synchronized锁住addElement、get整个方法,效率较低。
Stack:是Vector的子类,可先进先出,用来实现栈。
ConcurrentLinkedQueue:效率最高的线程安全队列。
PriorityQueue:有优先级的队列,线程不安全。
PriorityBlockingQueue:有优先级的队列,线程安全。
ArrayBlockingQueue:有界的阻塞的数组队列,数组被占满后不能自动扩容。数组已满再加元素,add抛出异常,put阻塞等待。
LinkedBlockingQueue:有界的阻塞的链表队列。
ArrayDeque:双向数组队列,线程不安全。
LinkedBlockingDeque:双向阻塞队列。
SynchronousQueue:无缓冲的等待队列,用于数据交换。
DelayQueue:延时队列,延时时间到期后才出队列。


名称
数据结构
线程安全
 可阻塞 
 容量有限 
 元素可空 
  明细  
 ArrayList
 数组
 LinkedList
 链表(双向)  
 Vector
 数组
synchronized
 
 Stack
 数组
 是 
synchronized
 ConcurrentLinkedQueue  
 链表
CAS
 PriorityQueue
 数组
 PriorityBlockingQueue
 数组
 ReentrantLock  
 是 
Condition
 ArrayBlockingQueue
 数组
ReentrantLock
Condition
 LinkedBlockingQueue
 链表
ReentrantLock
Condition
 ArrayDeque
 数组(双向)
 LinkedBlockingDeque
 链表(双向)
ReentrantLock
Condition
 SynchronousQueue
 -
CAS
 LockSupport   
 DelayQueue
 数组
ReentrantLock
Condition
表1.2 各种List、Queue比较
 
Set
 
图片
图1.3:Set类图
实现类
HashSet
:无序,使用HashMap实现。
TreeSet:有序,使用TreeMap实现。
ConcurrentSkipListSet:线程安全,使用ConcurrentSkipListMap实现。
CopyOnWriteArraySet:线程安全,适合读远多于写的情况,使用CopyOnWriteArrayList实现。

0
1
分享到:
评论

相关推荐

    5.java集合概述.zip

    5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5....

    Java集合概述与实例分析

    我自制的Java集合概述与实例分析PPT,包含了Java中集合的常见类型介绍,常用方法,底层实现形式以及一个利用集合能够很好解决问题的自创例子。

    JAVA 面向对象程序设计第7章 集合.pptx

    7.1 集合概述;7.1.1 Java集合体系概述;7.1.1 Java集合体系概述;7.1.1 Java集合体系概述;7.1.1 Java集合体系概述;7.1.1 Java集合体系概述;7.1.1 Java集合体系概述;7.1.2 学生实践练习;7.1.2 学生实践练习;7.2 List...

    java 集合部分笔记

    java 集合部分笔记 1 集合的概述 2 Collection接口和Iterator接口(迭代器) 3 List接口 4 Set接口 5 Map接口

    Java集合框架.pdf

    Java集合框架概述 Java集合框架是一个抽象数据类型的框架,它提供了一组接口和类,可用于处理各种类型的数据结构,如列表、队列、集、映射等。 Java集合框架的主要特点是: 1、可扩展性:Java集合框架提供了一组可...

    Java集合框架(JCF:Java Collections Framework)之概述

    Java集合框架(JCF:Java Collections Framework)之概述.doc

    Java集合框架使用总结

    Java集合框架使用总结 前言: 本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看Java API文档。 一、概述 数据结构对程序设计...

    Java集合框架常见面试题

    Java集合框架常见面试题 剖析⾯试最常⻅问题之 Java 集合框架 包含以下几个模块: 1、集合概述 2、Collection子接口之List 3、Collection子接口之Set 4、Map接口 5、Collection工具类 6、其他重要问题

    java集合框架之概述

    主要是一些java集合框架的简介,希望对大家有用,多谢下载啊 呵呵

    7.尚硅谷_java基础_java集合

    Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration

    Java基础_Java集合

    Java 集合概述  Collection 接口  Iterator 接口  Set  List  Map  Collections 工具类  Enumeration

    JAVA书籍大集合(几十本JAVA书籍)

    JAVA书籍大集合(几十本JAVA书籍) 分布式应用开发 Apache+Servlet+jsp APACHE+TOMCAT+ORACLE J2EE Java Socket JAVA多线程 Linux Java编程 EJB概述 C#、Java之比较(ASP+和JSP之间的抉择) Servlet 学不会的JAVA,...

    java接口方法概述集合详解.docx

    1、接口是Java语言中的一种引用类型,是方法的"集合",所以接口的内部主要就是定义方法,包含常量,抽象方法(JDK 7及以前),额外增加默认方法和静态方法(JDK 8),额外增加私有方法(jdk9)。 接口的定义,它与定义类...

    JAVA集合框架概述

    JAVA集合框架主要由两个接口派生而出,分别是Collection接口进入Map接口,这是集合框架的两个根接口,其中Collection接口的实现类直接保存对象,而Map接口的实现类是用键值对(key-value)的形式保存数据的,可以根据...

    Java集合框架常见面试题.pdf

    集合概述 Java 集合概览 从下图可以看出,在 Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接⼝。 并且,以 Map 结尾的类都实现了 Map 接⼝。 说说 List,Set,Map 三者的区别? List (对付顺序的好帮...

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 第07章_Java集合(共51页).pptx

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 ...第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程

    完整版 Java基础入门教程 Java程序语言设计 01 java语言基础 Java语言概述(共24页).ppt

    完整版 Java基础入门教程 Java程序语言设计 01 java语言基础 Java语言概述(共24页).ppt 完整版 Java基础入门教程 Java程序语言设计 02 java语法基础 Java语法基础(共32页).ppt 完整版 Java基础入门教程 Java程序...

    推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 01.Java语言概述(共21页).ppt

    推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 08.Java集合(共44页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 09.泛型(共15页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到...

    完整版优质java课件 Java基础入门教程 Java编程技术 共14个章节 全套PPT课件资源集合.rar

    Java基础入门教程 Java编程技术01 java概述(2学时)(共27页).ppt Java基础入门教程 Java编程技术02 Java编程基础(4学时)(共55页).ppt Java基础入门教程 Java编程技术03 数组(2学时)(共22页).ppt Java基础入门...

    完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt

    完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第2章 java语言基础(共31页).ppt 完整版精品java课件 Java基础入门教程 ...

Global site tag (gtag.js) - Google Analytics