(本文为博主JAVA课程学习总结)
一.集合框架介绍
集合框架:用来表示和操作集合的统一的架构。
集合类存放java.util包中。
较重要的几个集合类与相关接口:Iterable(迭代器接口)、Collection(类集接口)、List(列表接口)、Set(数据集接口)、Queue(队列)、Map(键-值对组合映射表)
层次结构图(这张图片很重要,箭头指向父类):
(源自海同网校)
(一)Iterable接口
通过Iterable接口可以实现“foreach”语句(增强for循环),即:
Iterator:迭代器类,是Iterable接口中的方法,也作为另一个接口存在。Iterable接口的Iterator方法是返回一个迭代器(即Iterator对象)。而Iterator接口中的方法实现依赖于迭代器的当前迭代位置。二者不同,具体可查看API文档。
通过Iterator迭代器实现ArrayList的元素遍历:
Listiterator:是Iterator的子类,允许双向遍历集合并修改和删除元素。
(二)Collection接口
Collection接口是层次结构中的根接口。
Collection接口定义的方法:int size(),boolean isEmpty(),boolean contains(Object o)……(具体可参照API说明文档)
(三)List、Set、Map接口
List接口:对Collection接口的扩展,有序且可重复。
Set接口:对Collection接口的扩展,无序且不可重复。
Map(映射)接口:存储关键字-值对的对象(简称键值对)。当给定一个关键字时,可查询得到它的值。这里关键字和值都可以是对象。
注意:Map不是Collection的子接口,故无法采用迭代器遍历。
二.List容器
List容器中,有些类似于数组,可以直接通过元素在列表中的位置来访问元素。
(一)ArrayList —— 动态数组
ArrayList常用方法:
E get(int index) 返回列表中指定位置上的元素(E为ArrayList中的类型参数)
int indexOf(Object o) 返回此列表中首次出现指定元素的索引,若不包含则返回-1。
具体可查看API文档。
优点:ArrayList查询效率较高。且ArrayList的实现是不同步的,所以在单线程中效率较高。
缺点:插入、删除效率低。
(二)LinkedList —— 链表
常用方法:
void addFirst(E e) 将指定元素插入此列表的开头。
E removeFirst() 移除并返回此列表的第一个元素。
LinkedList继承了Deque(Queue的子类),故具有双向队列的一些特有性质。
优点:做插入、删除效率较高。
缺点:查询效率低。
三.Map容器
Map容器中的键(key)必须是唯一的,值(value)是可以重复的。
注:有些映射可以接收null键与null值,而有些不行。
支持映射的接口:Map、Map.Entry、SortedMap。
常用方法:int size()、boolean isEmpty()、boolean containsKey(Object key)、boolean containsValue(Object value)、V get(Object key)、V put(K key, V value)、Set<Map.Entry<K,V>>entrySet()(返回包含映射关系的Set视图)……
具体可参照API说明文档
(一)Map.Entry接口
Map.Entry接口类似于Iterator接口,表示的是键值对(映射项),它是Map接口的内部接口。
(二)HashMap
HashMap类是基于哈希表的Mao接口实现。(允许使用null键和null值)
注:HashMap不保证映射的顺序。
构造方法与常用方法可参照API文档。
Hashtable是HashMap的前身。
设计Hashode()方法时,最好让不相等的对象生成不同的整数结果。(如果编程者对HashCode方法有特定要求,可进行重写。)
四.Set容器
Set容器是一个不包含重复元素的Collection,最多包含一个null元素。Set容器无法保证元素顺序。
(一)HashSet
HashSet使用哈希表进行存储。
HashSet中的方法全部继承自父类和接口。
HashSet实际上是HashMap的一个实例,HashSet的内部操作底层数据是HashMap的key。
(二)TreeSet
TreeSet:通过使用树来进行对Set中的对象进行升序存储。(是TreeMap的一个实例,TreeSet的内部操作底层数据是TreeMap的key)
优点:访问和检索速度很快,适用于存储大量需要快速检索的排序信息。
五.Collections类
Collections类中包含了若干类集和映射的算法,也就是说Collections类是为上述的几种特殊的类集和映射服务的,我们可以通过调用Collections类来实现对数据的排序处理等。
常用方法:
public static int binarySearch(List<T> list, T key)
使用二分搜索法搜索指定列表,以获得指定对象。
public static void reverse(List<?> list)
反转指定列表中元素的顺序。
public static void shuffle(List<?> list)
打乱指定列表中元素的顺序。
……(具体可查看API文档)