Java基础——Collections框架

1.Java集合框架图

Collections框架主要有两个接口:Collection、Map

Collection接口有两个子接口:List和Set. (List接口允许null,可以重复,具有存储顺序;Set接口允许null,不可以重复)

2、List接口有3个实现类分别是:ArrayList、LinkedList、Vector,它们的共同点以及不同点是:

 (1)ArrayList和Vector都是索引速度快,插入数据慢

ArrayList和Vector都是基于存储元素的Object[ ] array实现的,它们会在内存中开辟一块连续的空间来存储,因此,它们支持用序号(下标)来访问元素,同时索引数据的速度比较快。但是插入元素时需要移动容器中的元素,所以对数据的插入操作执行得比较慢。ArrayList和Vector都有一个初始化的容量的大小,当里面存储的元素超过这个大小时就需要动态地扩充它们的存储空间。Vector默认扩充为原来的2倍(每次扩充空间的大小是可以设置的),而ArrayList默认扩充为原来的1.5倍(没有提供方法来设置空间扩充的方法)

(2)ArrayList非同步、非线程安全,Vector同步、线程安全

没有一个ArrayList的方法是同步的,而Vector的绝大多数方法(例如add、insert、remove、set、equals、hashcode等)都是直接或者间接同步的,所以Vector是线程安全的,ArrayList不是线程安全的。

(3)LinkedList索引数据慢,插入数据快

LinkedList是采用双向列表实现的,对数据的索引需要从列表头开始遍历,因此用于随机访问则效率比较低,但是插入元素时不需要对数据进行移动,因此插入效率较高。同时,LinkedList也是非线程安全的。

总结:当对数据的主要操作为索引或只是在集合的末端增加、删除元素时,使用ArrayList和Vector效率比较高;当对数据的操作主要是为指定位置的插入或删除操作时,使用LinkedList效率比较高;当在多线程中使用容器时,选用Vector较为安全。

3.Set接口主要有三个实现类:HashSet、LinkedHashSet、TreeSet

(1)HashSet
HashSet有以下特点:
->  不能保证元素的排列顺序,顺序有可能发生变化。
->  不是同步的。
->  集合元素可以是null,但只能放入一个null。
    当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。
    注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算 hashCode的值。

(2)LinkedHashSet
    LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
    LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

(3)TreeSet
    TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
    TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0。
 

4.HashMap接口有几个常用的实现类,HashMap、TreeMap、LinkedHashMap。其中HashMap最常用。

(1)HashMap,基于散列表实现,查找速度快(依赖hashcode()和equals()),存放元素无序。

(2)TreeMap,基于红黑树实现,存放有序(依赖Compareable)。

(3)LinkedHashMap,基于散列表、双向链表实现。如HashMap的查找速度,遍历时有序(默认为插入顺序,可通过构造方法设置“最近最少使用(Least Recently Used)顺序”)。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章