java容器框架概述

容器框架概述       

        在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并发包中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值