JAVA容器_Java容器框架

这篇博客介绍了Java中的容器框架,包括List、Set、Queue、Map四大类及其子类。重点讲解了Comparator接口在排序中的作用,Iterator和ListIterator的迭代方式,以及Iterable接口支持的foreach循环。还提到了常用的辅助类Arrays和Collections,以及Set、List、Queue和Map的具体实现,如ArrayList、HashSet、LinkedList和HashMap等。
摘要由CSDN通过智能技术生成

容器框架概述:

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

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

374ad1c33418efb0955ec9a142fc867f.png

Map容器的类图如下:

531b8898e4e7558ab398df630f498b64.png

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

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循环能够简化代码,提高效率:

1 //Iterator迭代器循环模式

2 ArrayList list = new ArrayList();3 for(Iterator it =list.iterator(); it.hasNext(); )4 System.out.println(it.next()); //自动拆箱成int输出5

6 //For-each loop模式

7 for(Integer i : list)8 System.out.println(i);

Arrays和Collections

Arrays是关于数组的封装类,封装了对数组操作的多种方法,如sort()、copyOf()、binarySearch()、asList()等方法;Collections封装了很多对于容器的操作,如max()、min()、reverse()、sort()等方法,生成同步容器如Collections.synchronizedList()、Collections.synchronizedSet()等。

Set

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

8d361094b87e155d06bb1475f529c46a.png

其子容器主要包括:

AbstractSet:抽象集合类,实现了equals()和hashCode()方法

SortedSet:有序(默认自然序)

NavigableSet:继承自SortedSet

TreeSet:实现NavigableSet接口,继承AbstractSet

HashSet:hash方式存储(实际上是一个Map的实例)

LinkedHashSet:双向循环链表,不可重复,顺序与插入顺序保持一致,或者实现自定义的顺序

EmumSet:只能存放Emum枚举类型

List

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

a0cd03991b2af42bafeec1b497db6700.png

List子容器主要包括:

ArrayList:数组实现,随机存取

LinkedList:双向循环链表,顺序存取

Vector:同步,其他与ArrayList相同

Stack:同步,继承自Vector,“先进后出”

Queue

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

330bc35b9ad2c8df22c23fcef329b346.png

主要的子容器包括:

AbstractQueue:抽象队列

PriorityQueue:继承自AbstractQueue,数据结构中堆Heap的实现

Deque:双端队列,两端都可以插入和删除

输出受限的双端队列

d82e8e3559fb48f9f1fb72870cac5d07.png

输入受限的双端队列

fc17cef03b4c8208d31f122c4eb48c1b.png

Map

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

7a483536d2f016bcb1b97dc52352371e.png

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、付费专栏及课程。

余额充值