天天看点

集合框架(List接口,Map接口,Iterator迭代器,泛型集合)

一,主要接口与实现的关系图

集合框架(List接口,Map接口,Iterator迭代器,泛型集合)
  • 接口:表示集合的抽象数据类型,图中的虚线。eg:Conllection,List,Set,Map,Iterator
  • 实现:集合框架中接口的具体实现,图中实线。eg:ArrayList,LinkedList,HashMap,HashSet
  • Collection:接口存储一组不唯一(允许重复),无序的对象;
  • Set:接口继承Collection接口,存储一组唯一(不允许重复),无序的对象;
  • List:接口继承Collection接口,存储一组不唯一(允许重复),有序的对象;
  • Map:接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。map中的key不要求有序,不允许重复;value同样不要求有序,但允许重复;
  • Iterator:负责定义访问和遍历元素的接口;

二,List接口

  1. 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开始
  1. LinkedList(删除和添加快,长度增长时,增长50%)

    采用链表存储方式;优点在于插入,删除元素时效率比较高;它提供了额外的方法(下面有介绍),这些方法使得LinkedList可被用作堆栈或者队列;

LinkedList的一些特殊方法

方法名称 描述
void addFirst(Object o) 在列表的首部添加元素
void addLast(Object o) 在列表的末尾添加元素
Object getFirst() 返回列表中的第一个元素
Object getLast() 返回列表中的最后一个元素
Object removeFirst() 删除并返回列表中的第一个元素
Object removeLast() 删除并返回列表中的最后一个元素

三,Map接口

  1. 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() 从此映射中移除所有的映射关系
  1. 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():返回要访问的下一个元素;

  1. 使用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都是根据这个进行遍历