一,主要接口与实现的关系图
- 接口:表示集合的抽象数据类型,图中的虚线。eg:Conllection,List,Set,Map,Iterator
- 实现:集合框架中接口的具体实现,图中实线。eg:ArrayList,LinkedList,HashMap,HashSet
- Collection:接口存储一组不唯一(允许重复),无序的对象;
- Set:接口继承Collection接口,存储一组唯一(不允许重复),无序的对象;
- List:接口继承Collection接口,存储一组不唯一(允许重复),有序的对象;
- Map:接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。map中的key不要求有序,不允许重复;value同样不要求有序,但允许重复;
- Iterator:负责定义访问和遍历元素的接口;
二,List接口
-
ArrayList(查询快,重速度,轻安全)
对数组进行了封装,实现了长度可变的数组;ArrayList存储数据的方式和数组相同,都是在内存中分配连续的空间;优点在于遍历元素和堆积访问元素的效率比较高;
List接口中定义的常用方法(也是ArrayList的各种常用方法)
方法名称 | 描述 |
---|---|
boolean add(Object o) | 在列表末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素,原索引位置及其后面的元素依次后移 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素(取出的元素时Object类型) |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置的元素,起始索引位置从0开始 |
-
LinkedList(删除和添加快,长度增长时,增长50%)
采用链表存储方式;优点在于插入,删除元素时效率比较高;它提供了额外的方法(下面有介绍),这些方法使得LinkedList可被用作堆栈或者队列;
LinkedList的一些特殊方法
方法名称 | 描述 |
---|---|
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
三,Map接口
-
HashMap(线程非安全,允许为null)
存储方式是哈希表,哈希表也称为散列表,是根据关键码值(key value)而直接进行访问的数据结构,也就是说,它通过吧关键码映射到表中一个位置来访问,以加快查找速度,存放记录的数组成为散列表,使用这种方式存储数据的优点就是查询指定元素效率高;
Map常用方法(HashMap常用方法)
方法名称 | 描述 |
---|---|
Object put(Object key,Object value) | 以“键-值对”的方式进行存储(键必须唯一,值可重复,如果键重复则自动覆盖原来的键值对) |
Object get(Object key) | 根据键返回相关联的值,若不存在指定的键,则返回null |
Object remove(Object key) | 删除指定的键映射的“键-值对” |
int size() | 返回元素的集合 |
Set keySet() | 返回键的集合 |
Collection values() | 返回值的集合 |
boolean containsKey(Object key) | 若存在指定的键映射的“键-值对”,则返回true |
boolean isEmpty() | 若不存在键-值映射关系,则返回true |
void clear() | 从此映射中移除所有的映射关系 |
- HashTable(线程安全,key和value都不允许为null)
知识点补充:
Hashtable Hashmap的异同:
Hashmap类出现之前,JDK中存在一个和它同样采用哈希表存储方式、同样实现键值映射的集合类HashTable。两者实现原理相同,功能相同,很多情况下可以互用。
Hashtable Hashmap的主要区别如下:
Hashtable Dictionary类,而 Hashmap实现了Map接口。HashTable是线程安全的,HashMap重速度、轻安全,是线程非安全的,所以当运行到多线程环境中时,需要程序员自己管理线程的同步问题。
开发过程中,最好使用新版本的 Hashmap。
四,Iterator迭代器
所有集合接口和类都没有提供相应的遍历方法,二十八遍历交给迭代器Iterator完成。Iterator为集合而生,专门实现集合的遍历。他隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口;
Collection接口的iterator方法返回一个Iterator,然后通过Iterator接口的两个方法即可方便的实现遍历;
主要方法:
(1),boolean hasNext():判断是否存在另一个可访问的元素
(2),Object next():返回要访问的下一个元素;
- 使用Iterator遍历集合类
//部分代码
Set keys = hashMap.keySet(); //取出所有key的集合
Iterator it=keys.iterator(); //获取Iterator对象
while(it.hasNext()){
String key = (String)it.next(); //取出key
String value = hashMap.get(key); //根据key取出对应的值
}
list和map都是根据这个进行遍历