转载轻注明出处:http://blog.csdn.net/ns_code/article/details/35564663


Java集合工具包位于Java.util包下,包括了非常多经常使用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致能够分为例如以下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。

Java集合类的总体框架例如以下:

从上图中能够看出,集合类主要分为两大类:Collection和Map。

Collection是List、Set等集合高度抽象出来的接口,它包括了这些集合的基本操作,它主要又分为两大部分:List和Set。

List接口通常表示一个列表(数组、队列、链表、栈等)。当中的元素能够反复。经常使用实现类为ArrayList和LinkedList。另外还有不经常使用的Vector。

另外,LinkedList还是实现了Queue接口,因此也能够作为队列使用。

Set接口通常表示一个集合。当中的元素不同意反复(通过hashcode和equals函数保证),经常使用实现类有HashSet和TreeSet。HashSet是通过Map中的HashMap实现的,而TreeSet是通过Map中的TreeMap实现的。

另外。TreeSet还实现了SortedSet接口。因此是有序的集合(集合中的元素要实现Comparable接口,并覆写Compartor函数才行)。

我们看到,抽象类AbstractCollection、AbstractList和AbstractSet分别实现了Collection、List和Set接口,这就是在Java集合框架中用的非常多的适配器设计模式,用这些抽象类去实现接口,在抽象类中实现接口中的若干或所有方法,这样以下的一些类仅仅需直接继承该抽象类。并实现自己须要的方法就可以,而不用实现接口中的所有抽象方法。

Map是一个映射接口,当中的每一个元素都是一个key-value键值对。相同抽象类AbstractMap通过适配器模式实现了Map接口中的大部分函数。TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现。另外。不经常使用的HashTable直接实现了Map接口,它和Vector都是JDK1.0就引入的集合类。

Iterator是遍历集合的迭代器(不能遍历Map。仅仅用来遍历Collection),Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合。ListIterator则专门用来遍历List。而Enumeration则是JDK1.0时引入的,作用与Iterator相同。但它的功能比Iterator要少。它仅仅能再Hashtable、Vector和Stack中使用。

Arrays和Collections是用来操作数组、集合的两个工具类,比如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有非常多静态方法能够返回各集合类的synchronized版本号,即线程安全的版本号,当然了,假设要用线程安全的结合类。首选Concurrent并发包下的相应的集合类。

【Java集合源代码剖析】Java集合框架的更多相关文章

  1. Java集合源代码剖析(一)【集合框架概述、ArrayList、LinkedList、Vector】

    Java集合框架概述 Java集合工具包位于Java.util包下.包括了非常多经常使用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致能够分为例如以下五个部分:List ...

  2. Java集合源代码剖析(二)【HashMap、Hashtable】

    HashMap源代码剖析 ; // 最大容量(必须是2的幂且小于2的30次方.传入容量过大将被这个值替换) static final int MAXIMUM_CAPACITY = 1 << ...

  3. 【Java集合源代码剖析】ArrayList源代码剖析

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/35568011 转载请注明出处:http:// ...

  4. 【Java集合源代码剖析】HashMap源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/36034955 您好,我正在參加CSDN博文大赛,假设您喜欢我的文章.希望您能帮我投一票.谢 ...

  5. 【Java集合源代码剖析】Hashtable源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/36191279 Hashtable简单介绍 Hashtable相同是基于哈希表实现的,相同每 ...

  6. 【Java集合源代码剖析】LinkedList源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/35787253 您好.我正在參加CSDN博文大赛.假设您喜欢我的文章,希望您能帮我投一票,谢 ...

  7. 【Java集合源代码剖析】LinkedHashmap源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985 前言:有网友建议分析下LinkedHashMap的源代码.于是花了一晚上时间 ...

  8. 【Java集合源代码剖析】TreeMap源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/36421085 前言 本文不打算延续前几篇的风格(对全部的源代码加入凝视),由于要理解透Tr ...

  9. Java没有源代码的同步集合~

    存档~~~~ Synchronized,volatile,lock 锁定->[就绪队列,阻塞队列] 第一个是jvm等级达到. 与volatile所不同的是,后者不能从工作存储器写回到主存储器. ...

随机推荐

  1. cocos2d-x引擎优化 修改记录

    3.13 一些无聊的bug etc1 在android 平台不能正常显示,包括 cc.Button,setGray,clipeNode     3.13.1优化记录   7月 2.公式计算改为长整型, ...

  2. Spark1.4远程调试

    1)首先,我们是在使用spark-submit提交作业时,使用 --driver-java-options ”-Xdebug -Xrunjdwp:transport=dt_socket,server= ...

  3. Spark机器学习:TF-IDF实例讲解

    测试数据源:20 Newsgroups (http://qwone.com/~jason/20Newsgroups/),其中包含20个领域的新闻,此次我们使用20news-bydate-train作为 ...

  4. Android 获取 json

    Android  获取 json MainActivity.java package com.example.jsontest; import java.io.IOException; import ...

  5. 在Delphi中使用键盘勾子获取键盘输入(译--5月7日)

    http://blog.sina.com.cn/s/blog_502b2e970100949s.html 获取键盘输入以控制无法接受输入焦点的控件考虑一些游戏,显示图片在TPainBox,但是TPai ...

  6. [转] 利用Matlab提取图片中曲线数据

    原文地址 网易博客 前一段时间看到一篇文章"利用Matlab提取图图片中的数据",觉得思路挺好,遂下载下来研究了一番,发现作者所编写的程序没有考虑原始图片非水 平放置的情况,而实际 ...

  7. inner join, left join ,right join 结果

    假设有两个表结构如下: 表table1 表 table 2 内连接: --内连接 select * from table1 inner join table2 on table1.ID = table ...

  8. 正确看待POW与POS,总结与区分

    POW:Proof of Work,工作证明. 比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值.要得到合理的Block ...

  9. 在Centos 7中使用 Docker搭建MySQL异地双向复制环境

    (0)一些准备操作: Centos安装好之后(这里使用的是vm虚拟机) 将当前用户添加到sudoers中: su root vim /etc/sudoers 找到 root ALL=(ALL) ALL ...

  10. Python Xpath 提取html整个元素(标签与内容)

    提取html某标签中文字时,文字中含有:“<sub>2</sub>O<sub>5</sub>”,导致提取的文字不符合预期. 解决方法: #coding= ...