集合可以看做是一个容器,所有java类的书都可以看作是一个集合。对于集合中的各个对象很容易将其存放到集合中,也很容易将其从集合中取出来,还可以将其按照一定的顺序进行摆放。提到集合不难想到数组,集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的;
常用的集合有List集合类、Set集合类和Map集合类,其中List与Set继承了Collection接口,各接口还提供了不同的实现类。关系如下:
Collection接口
Collection接口是层次结构中的根接口。Collection接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。如下:
- add(E e)
将指定的对象添加到该集合中 - remove(Object o)
将指定的对象从该集合中移除 - isRmpty()
返回Boolean值,用于判断当前集合是否为空 - iterator()
返回再此Collection的元素上进行迭代的迭代器。用于遍历集合中的对象 - size()
返回int型值,获取该集合中元素的个数
List集合
List集合中的元素允许重复,各元素的顺序就是对象插入的顺序。List集合继承了Collection接口,因此包含了Collection中的所有方法,另外还定义了两个很重要的方法:
- get(int index)
获取指定索引位置的元素 - set(int index,Object obj)
将集合中指定索引位置的对象修改为指定的对象
List接口常用的实现类有ArrayList和LinkedList。
- ArrayList:实现可变数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问;缺点是向指定的索引位置插入对象或者删除对象速度较慢。
- LinkedList:采用链表结够保存对象。优点方便向集合插入和删除对象,此时效率更高,随机访问ArrayList效率高
Set集合
Set集合里面的对象不按特定的方式排序,只是简单地加入到集合中,而且Set集合不能含有重复的对象。
Set接口经常使用的实现类有HashSet和TreeSet。
- HashSet:由哈希表支持的,也是HashMap的一个具体例子。不能保证Set迭代的顺序,允许含有null元素。
- TreeaSet:在集合遍历的时候会按照自然顺序递增排序,也可以按照指定比较器进行排序。
TreeSet类新增方法如下:
- first()
返回此Set中当前第一个(最低元素) - last()
返回此Set中当前最后欧一个(最高)元素 - comparator()
返回对此Set中的元素进行排序的比较器。如果此Set使用自然顺序,则返回null - headSet(E toElement)
返回一个新的Set集合,新集合是toElement(不包含)之前的所有对象 - subSet(E fromElement, E toElement)
返回一个新的Set集合,是fromElement(包含)对象与toElement(不包含)对象之间的所有对象 - tailSet(E fromElement)
返回一个新的Set集合,新集合包含对象fromElement(包含)之后的所有对象
Map集合
Map集合没有继承Collection接口,它提供key和value的映射关系。其中Map集合中不能包含相同的key,key还决定了存储对象映射的位置。Map接口提供了集合的常用方法如下:
- put(K key, V value)
向集合中添加指定的key与value的映射关系 - containsKey(Object key)
如果此映射包含指定key的映射关系,则返回true - containsValue(Object value)
如果此映射将一个或多个key映射到指定值,则返回true - get(Object key)
如果存在指定的key对象,则返回该对象对应的值,否则返回null - keySet()
返回该集合中所有key对象形成的Set集合 - values()
返回该集合中所有值对象形成的Collection集合
Map接口常用的实现类有HashMap和TreeMap。
- HashMap:基于哈希表的Map接口实现,允许使用null值和null键,但是必须保证唯一性。HashMap通过哈希表可以对内部的映射关系快速查找,而且在添加和删除操作时候效率更高;不保证映射的顺序。
- TreeMap:实现了Map接口,而且也实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定顺序。在添加、删除和查找时TreeMap比HashMap性能稍差,但是希望在集合中对象有一定的排序顺序是,则TreeMap会较好。