Java集合(一)总体框架

来源:互联网 发布:php 获取图片拍摄地点 编辑:程序博客网 时间:2024/06/18 02:24

注:原博客 http://www.cnblogs.com/skywang12345/p/3323085.html,我仅是梳理做学习笔记

java集合是java提供的工具包,包含了:集合,链表,队列,栈,数组,映射等,集合工具类的包位置:java.util.*
java集合主要分4个部分:List列表,Set集合,Map映射,工具类(Iterator迭代器,Enumeration枚举类,Arrays和Collections),整体各种类的框架图如下:

大致说明:主干,Collection和Map

1.Collection简介

Collection是一个高度抽象出来的集合,它包含了集合的基本操作:添加,删除,清空,遍历,是否为空,获取大小,是否保护某元素 为了方便,抽象出了AbstractCollection抽象类,它实现了Collection中的绝大多数函数,这样我们可以通过继承AbstractCollection省去重复编码。
另外Collection中有一个iterator()函数,它的作用是返回一个Iterator接口,我们通过Iterator迭代器遍历集合。

(1)List简介

List是一个接口,是一个有序的队列,可以有重复的元素,每个元素都有一个索引。它包含了Collection中的全部函数接口,也有自己额外的API接口,主要有:添加,删除,获取,修改指定位置的元素,获取List中的子队列

LinkedList:是一个双向链表,它可以被当做堆栈,队列或者双端队列进行操作,随机访问效率低,但是随机插入,删除效率高,非同步的  ArrayList:是一个数组队列,相当于动态数组,能够动态增长,随机访问效率高,随机插入,删除效率低,线程不安全Vector:是一个矢量队列,和ArrayList一样,是一个动态数组,线程安全Stack:是一个栈,它继承于Vector,它的特性是先进后出,因为Vector是通过数组实现的,那么Stack也是数组实现  

(2)Set简介

Set是一个不允许有重复值的集合,Set的实现类都是基于Map去实现的(HashSet是通过HashMap实现,TreeSet通过TreeMap实现)

HashSet:通过HashMap实现,元素无序的,不允许使用null,没有重复的元素集合。同时它是非同步的,如果多个线程同时访问一个set,而其中一个线程修改了set,那么它必须保持外部同步TreeSet:通过TreeMap实现,元素是有序的,它的排序方式取决于构造方法,是非同步的。  

2.Map简介

Map是一个映射接口,key-value键值对,Map中的每一个元素都包含一个Key和key对应的value。Map映射中不能包含重复的键,每个键最多只能映射到一个值。Map提供接口分别用于返回键集(keySet()返回键级的Set集合),值集(values()返回值集的Collection集合),或键-值映射关系集(entrySet()用于返回键-值的Set集合)

TreeMap:是一个有序的key-value集合,它是通过红黑树实现的。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。继承于AbstractMap所以是一个Map,即key-value集合。实现NavigableMap接口,支持一系列的导航方法比如返回有序的key集合。  HashMap:是一个散列表,它是通过拉链法实现的。继承于AbstractMap所以是一个Map,但是没有实现NavigableMap接口,所以是一个无序的键值对,它的键值对可以为null,线程不安全  WeakHashMap:是一个散列表,也是通过拉链法实现的。存储键值对,键值可以为Null。相比于HashMap,它的键是“弱键”,当"弱键"被GC回收时,它对应的键值也会被WeakHashMap中删除,线程不安全  HashTable:是一个散列表,也是通过拉链法实现的。它存储的是无序的键值对的映射,继承于Dictionary,实现了Serializable接口,函数是同步的,所以是线程安全的,key和value不可以为null  

3.对比图

(1) 

(2)List中不存在真正的有序无序,都是什么顺序存的就什么顺序读取出来,但是stack是栈,先进后出


原创粉丝点击