一.什么是集合?
数组,一旦被定义,长度不能变化。
而在实际开发中,我们经常需要保存一些变长的数据集合,需要能动态的保存我们数据。于是就有了集合框架。
二.层次关系
如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口
如图:
- java 中所有的集合类都实现了 Collection接口,它是集合类的根接口
- Map和collection接口没有直接关系,是相互独立的,但都属于集合类的一部分
- Iterator所有集合类都实现了这个接口,用于遍历集合中的元素
三.集合中的四大接口
1.List(列表)
主要存储有序的,可重复的数据。List主要关注事物的索引,查询快。
2.Set(集)
存储无序,不可重复的数据。Set主要关注事物的唯一性。
3.Map(映射)
存储键值对,键唯一,值可重复。关注事物的映射和键的唯一性。
4.Queue(队列)
队列是一个典型的先进先出(FIFO)的容器,放入容器的顺序和取出的顺序是相同的。关注事物被处理时的顺序.
四.集合中的经常用到的实现类
1.实现了List接口的ArrayList 和 LinkedList
ArrayList:允许所有元素,包括null。ArrayList没有同步。使用数组来存储元素。提供快速迭代和快速访问的能力,增删速度慢。
LinkedList:允许null元素,也是非同步的,实现了链表。访问速度慢,插入和删除速度快。
Vector:非常类似于ArrayList,所以也是用数组来存储元素,而Vector是线程同步的
2.实现了Set接口的HashSet和LinkedHashSet
HashSet:元素不可重复,底层用的也是数组,如果用hashSet来添加对象,一定要覆盖hashcode()和equals()。主要用于快速查询。
LinkedHashSet:具有hashSet的查询速度。内部维护元素的插入的顺序。
TreeSet:按照元素的自然顺序(和内容特质有关)进行排序
3.实现了Map接口的HashMap和HashTable
HashMap:实现了一个映像,允许存储空对象,允许键是空的,(键值对都可为空),非同步的。
HashTable:实现了一个映像,任何空的对象都不可以作为key或者value。是同步的。定义的键的类必须实现hashcode()和eqauls()方法。
TreeMap:对象是按照升序排序的。
4.实现了Queue接口的LinkedList和PriorityQueue