一.java集合类
集合类存放于java.util包中。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集)、list(列表)和map(映射)。
二.含义
Collection接口:Collection接口是java集合类最基本的接口,而Collections是针对集合类的一个帮助类,他提供了一系列的静态方法实现对各种集合的搜索、排序、线程安全化等操作,一个Collection代表一组Object,即Collection的元素(Elements)。
List接口:List是有序的Collection,有序是指元素的次序而非大小顺序,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。同时也是允许有相同元素的Collection。实现List接口的常用类有ArrayList、LinkedList、Vector、Stack。
ArrayList:ArrayList是动态数组,它允许所有元素,包括null。可以根据插入的元素的数量自动扩充容量,而使用者不需要关心它是什么时候扩容的,只要把它当成足够大的数组来使用就行了。ArrayList可以直接根据下标索引访问元素,ArrayList没有同步,属于非线程安全。
Linkedlist: 允许null元素。 内部实现是使用双向链表的方式来保存元素,因此插入与删除元素的性能较ArrayList好,但随机访问元素就需要遍历链表才能找到,性能上比ArrayList差。因此在需要频繁随机访问元素的情况下建议使用ArrayList,在需要频繁随机插入和删除的情况下建议使用LinkedList。注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List。
Set接口:不允许出现重复元素;集合中的元素位置无顺序;有且只有一个值为null的元素。
Hashset: HashSet使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。
Treeset: TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。
Map接口: Map是一种"链表数组"的结构,提供key到value的映射。一个Map中key是唯一的,每个key只能映射一个value。你也可以把Map看出一组Key集合或一组Value集合或一组Key-Value集合。
Hashmap: HashMap是非线程安全的,允许Key和Value都为空,其Key使用的哈希值是内部另外实现的方法计算而来,默认初始容量是16,当容量达到负载因子大小时重新分配空间进行再散列扩容,而且一定是以2的指数去扩容。
Treemap: TreeMap是jdk提供的唯一有序Map实现类。
三.区别
1. 所有的Collection类都实现了toString()方法。
2. 可以直接使用下表来访问List中的元素;可以根据每个元素的key值来访问Map中的元素;只能通过元素本身来访问Set中的元素。
3. 不能向set集合中添加相同的元素,会报错。
4. HashSet判断俩个元素是否相同是先判断equals方法,再判断hashCode方法。
5. TreeSet中某个元素被修改为与另一个元素相同时,这两个元素都不能被删除。
6. List集合(接口)为一个有序的,可重复的,集合中每个元素都其相应的顺序索引的集合,其索引默认根据添加顺序设定从0开始。