java.util包中提供了一些集合类,这些集合类又被称为容器。
提到容器不难想到数组,集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的;
数组用来存放基本类型的数据,集合用来存放对象的引用。
常用的集合有List集合、Set集合和Map集合,其中List与Set继承了Collection接口,各接口还提供了不同的实现类。
1、Collection接口
Collection接口是层次结构中的根接口。构成Collection的单位称为元素。Collection接口通常不能直接使用,但是该接口提供了添加元素、删除元素、管理数据的方法。
2、List接口
List接口继承了Collection接口,因此包含Collection中的所有方法,此外List接口还定义了一下两个重要的方法。
get(int index):获得指定索引位置的元素。
set(int index,Object obj):将集合中指定索引位置的元素修改为指定的对象
List接口的常用实现类:ArrayList与LinkedList:
ArrayListl类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问;缺点是向指定的索引位置插入对象或删除对象的速度较慢;
LinkedList类采用了链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入、删除对象时,使用LinkedList类实现的List集合的效率较高;但对于随机访问集合中的对象,使用LinkedList类实现List集合效率较低。
3、Set接口
Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但Set集合中不能包含重复的对象。Set集合由Set接口和Set接口的实现类组成。
Set接口常用的实现类有:HashSet和TreeSet类:
HashSet类由哈希表支持,它不保证Set的迭代顺序;
TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序。
4、Map接口
Map集合提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。key还决定了存储对象在映射中的存储位置。但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。
Map集合包括Map接口以及Map接口的所有实现类。