java容器框架概述

来源:互联网 发布:仓库数据管理软件 编辑:程序博客网 时间:2024/05/21 18:31

容器框架概述       

        在JDK8中rt.jar文件中,Java.util.*;包中的容器主要包括List、Set、Queue和Map四个大类,其中List、Set、Queue是和Collection接口相关的容器,而Map是单独列出来的容器。使用astah community版绘制了容器框架的类图。

        Collection的List、Set、Queue类图如下:


Map容器的类图如下:


注意到上面的类图中有几个单独列出的接口或者类:

Comparator 

       比较器接口,最重要的是compare()方法,对于容器中存储元素item的排序(包括自定义排序等)有重要作用,如果使用的是有序容器(SortedSet、SortedMap、TreeMap),则存放的元素必须是可进行比较的,需要实现Comparator接口。

RandomAccess 

       随机存取接口,实现容器的随机存取,如ArrayList、Vector(相当于同步的ArrayList)等。

Iterator和ListIterator 

       Iterator接口使用了迭代器设计模式来对所有的容器进行快速遍历,容器本身不需要关注存储元素item的数据类型(具体是什么类),这些确定类型和转型的工作由iterator负责实现。 
       ListIterator是List容器所独有的迭代器,与一般的Iterator相比,ListIterator包含add()、hasPrevious()、previous()、nextIndex()等方法,能够在遍历过程中修改集合、逆向顺序遍历、定位遍历索引;而Iterator只能遍历不能修改、只能顺向顺序遍历、不能定位索引。

Iterable 

        Iterable是java.lang*;包中的接口,实现该接口的类能后实现“For-each loop”,不要将其与Iterator和ListIterator迭代器混淆。”For-each loop“是增强for循环,例如对于一个ArrayList容器的循环,使用增强for循环能够简化代码,提高效率:

// Iterator迭代器循环模式ArrayList<Integer> list = new ArrayList<Integer>();for(Iterator it = list.iterator(); it.hasNext(); )     System.out.println(it.next());  // 自动拆箱成int输出// For-each loop模式for(Integer i : list)    System.out.println(i);
Arrays和Collections 

          Arrays是关于数组的封装类,封装了对数组操作的多种方法,如sort()、copyOf()、binarySearch()、asList()等方法;

          Collections封装了很多对于容器的操作,如max()、min()、reverse()、sort()等方法,生成同步容器如Collections.synchronizedList()、Collections.synchronizedSet()等。

set

          Set实现了数学中的“集合”容器,一般是不可重复,无序,最多只有一个null值。

其子容器主要包括:
       AbstractSet:抽象集合类,实现了equals()和hashCode()方法
       SortedSet:有序(默认自然序)
       NavigableSet:继承自SortedSet
       TreeSet:实现NavigableSet接口,继承AbstractSet
       HashSet:hash方式存储(实际上是一个Map的实例)
       LinkedHashSet:双向循环链表,不可重复,顺序与插入顺序保持一致,或者实现自定义的顺序
       EmumSet:只能存放Emum枚举类型

List

       List是List集合类的最上层接口,相当于实现了书序总的“集合”,主要是针对数组和链表。List是一般是可重复、无序、可添加null值的。

List子容器主要包括:
          ArrayList:数组实现,随机存取
          LinkedList:双向循环链表,顺序存取
          Vector:同步,其他与ArrayList相同
          Stack:同步,继承自Vector,“先进后出”

Queue

         Queue实现了数据结构中的队列,“先进先出”

主要的子容器包括:
       AbstractQueue:抽象队列
       PriorityQueue:继承自AbstractQueue,数据结构中堆Heap的实现
       Deque:双端队列,两端都可以插入和删除 

Map

       Map容器是利用映射关系来存储键值对的,独立于List、Set、Queue。键值对是一一对应的关系,一般允许键值为空,不可重复,是完全抽象类Dictionary的接口版本。

Map的子容器主要包括:
           AbstractMap:实现了内部EntrySet接口,实现equals、hashCode方法
           SortedMap:有序(默认自然序)
           NavigableMap:继承自SortMap
           TreeMap:基于红黑树,实现NavigableMap接口,继承Abstractmap
           HashMap:非同步,允许null
           LinkedHashMap:非同步,允许null,双向循环链表,顺序与插入顺序一致(类比于LinkedHashSet),或者实现自定义顺序。
           HashTable:同步,不允许null
           EmumMap:只能存放Emum枚举类型
           WeakHashMap:弱键(weak key)映射,允许释放映射所指向的对象,为解决某类特殊问题而设计。如果映射之外没有应用指向某个“键”,则该“键”可以被GC回收
           IdentityHashMap:使用“==”代替equals()对键进行比较的散列映射,专门为解决特殊问题而设计
           ConcurrentHashMap:线程安全的Map,属于java.util.concurrent并发包中

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 屁眼肉凸出来了怎么办 陶笛声音变闷了怎么办 吃三七粉上火了怎么办 红枣核吞下去了怎么办 话梅核吞下去了怎么办 芒果和海鲜吃了怎么办 小孩咳嗽喉咙有痰怎么办 4岁宝宝喉咙有痰怎么办 20天新生儿有痰怎么办 孩子嗓子老是有痰怎么办 买的哈密瓜不甜怎么办 吉他琴颈变形了怎么办 hcg值长得慢怎么办 蚊子老在耳边叫怎么办 刚买来的鲜海参怎么办 天冷手指关节疼怎么办 未满一年驾龄上高速违章怎么办 榴莲太生剥开了怎么办 榴莲开了没熟怎么办 榴莲打开了没熟怎么办 榴莲开口了没熟怎么办 榴莲没熟打开了怎么办 不熟的榴莲没熟怎么办 打开的榴莲没熟怎么办 开了的榴莲没熟怎么办 榴莲剥出来没熟怎么办 榴莲剥开了没熟怎么办 榴莲买回来没熟怎么办 整个的榴莲熟了怎么办 买的榴莲有点生怎么办 剥开的榴莲肉硬怎么办 买了钻戒后悔了怎么办 钻戒小钻石掉了怎么办 2岁宝宝爱看电视怎么办 笛子中音3有点高怎么办 长笛嘴型,杂音多怎么办 房子户型图没了怎么办 微信显示无响应怎么办 领完失业金档案怎么办 qq占了2g内存怎么办 吉他的弦断了怎么办