容器理解

 

目的:

如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。通常,对象的数量只有在运行期才能确定,生命周期更是难于把握。

为解决这个问题,JAVA提供了容器类机制。容器的设计总是编程语言要解决的根本性问题。

 

基本概念:

    容器类相当于集合,用来保存一组对象。基本类型包括List, Set, Queue和Map,要注意,这几个都是接口。

 

实现机制:

容器类图如下所示:

上图中,空心箭头的虚线表示一个类实现了某个接口,实心箭头的虚线表示某个类可以生成箭头所指向的类的对象。粗线框表示常用的容器类,实线表示普通类,虚线表示接口。

 

List:按序列保存对象的接口。

    接口方法:增add()、删remove()、改set()、查indexOf() get()

    ArrayList:底层基于数组的List接口的实现,长于随机访问,但是插入和删除较慢

    LinkedList:底层基于链表的List接口的实现,长于插入和删除,但是随机访问较慢

 

Queue:一个先进先出 (FIFO) 的接口。

    接口方法:增add() offer()、删remove() poll()、查改element() peek()

    LinkedList:包装了LinkedList内部的某些方法。

    PriorityQueue:底层基于实现的优先级队列,需要Comparator<T>接口定义对象间的比较规则。

 

Set:保存不重复对象的接口,离散数学中的集合。

    接口方法:增add()、删remove()、改[通过查找更改引用的值]、查get()

    TreeSet:底层基于红黑树实现基于比较的升序Set,同样通过Comparator接口。

    HashSet:底层基于散列函数,实现元素对象的O(1)复杂度的查找。

    LinkedHashSet:底层基于散列函数,并且用链表维护元素的插入顺序。

 

Map:保存由<键, 值>对组成的对象的集合,允许用来查找值。Map可看作是由键、值两个Set和映射表构成。

    接口方法:增put(K,V)、删remove()、改[通过查找更改引用的值]、查get()

    特殊方法:keySet()方法返回包含键的Set对象

TreeMap:基于红黑树的Map接口的实现,实现按主键升序的<K,V>键值对保持。

HashMap:基于键的哈希表的Map接口的实现,实现元素对象的O(1)复杂度的查找。

    LinkedHashMap:用链表维护<K,V>的插入顺序。

    

 

迭代器Iterator<E>接口:

目的:向上层系统封装底层容器的实现细节。例如,一个底层容器为List,随着业务的复杂,发现用Set更为合适,这样上层所有的调用细节都会发生改变。如果使用迭代器面向上层服务,则可扩展性更好。

接口方法:

    hasNext():测试是否有下一个元素

    next():游标移向下一个位置

    remove():移除next()操作前的上一个位置的元素

一个类通过实现Iterable<T>接口获得Foreach调用的能力。

原文地址:https://www.cnblogs.com/zjgtan/p/3321684.html