java集合类总结

首先了解什么是java集合API:

java集合API是用来表示和操作集合的统一框架,它包含接口、实现类、已经帮助程序员完成一些编程的算法。

具体来说,有6个集合接口,分别是:Collection、List、Set、Map、Iterator、Comparable。其基本结构如下图:

  1. Collection 接口
        Collection是最基本的集合接口,它定义了一组允许重复的对象,Collection接口派生出两个子接口List与Set,分别定义了不同的数据存储方式。
  2. Set 接口
         Set接口继承于Collection接口,它表示数学意义上的集合概念,Set集合中的元素是无序且不可重复的。
          Set 接口两种普通的实现:HashSet 和TreeSet。在更多情况下,您会使用 HashSet 存储重复自由的集合。考虑到效率,添加到 HashSet 的对象需要采用恰当分配散列码的方式来实现hashCode() 方法。虽然大多数系统类覆盖了 Object 中缺省的hashCode()实现,但创建您自己的要添加到 HashSet 的类时,别忘了覆盖 hashCode()。当您要从集合中以有序的方式抽取元素时,TreeSet 实现会有用处。为了能顺利进行,添加到TreeSet 的元素必须是可排序的。 “集合框架”添加对 Comparable 元素的支持,在排序的“可比较的接口”部分中会详细介绍。我们暂且假定一棵树知道如何保持java.lang 包装程序器类元素的有序状态。一般说来,先把元素添加到 HashSet,再把集合转换为TreeSet 来进行有序遍历会更快。

    为优化 HashSet 空间的使用,您可以调优初始容量和负载因子。TreeSet 不包含调优选项,因为树总是平衡的,保证了插入、删除、查询的性能为log(n)

    HashSet 和 TreeSet 都实现 Cloneable 接口。

  3. List 接口

       List接口也继承于Collection接口,但是与Set接口恰恰相反,List接口的集合类中的元素是有序且可重复。

          两个重要的实现类:ArrayList和LinkedList

          1.ArrayList特点是有序可重复的,读快改慢。

          2.LinkedList是一个双向链表结构的,改快读慢。

    Set和List对比:
        Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
        List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

  4. Map接口

    Map也是接口,但没有继承Collection接口。该接口描述了不重复的键到值的映射。Map接口用于维护键/值对

    特征:它描述了从不重复的键到值的映射。

    两个重要的实现类:HashMap和TreeMap

           1.HashMap,基于哈希表实现,特点就是键值对的映射关系。一个key对应一个Value。HashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。

           2.TreeMap,基于红黑书实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历。 历史遗留类HashTable,也是Map的实现类,其与HashMap区别在于:

      ● HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。

      ● HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。

      ● HashMap不是同步的,而Hashtable是同步的。

      ● 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。

  5. Iterator接口
    所有实现了Collection接口的容器类都有iterator方法,用于返回一个实现了Iterator接口的对象。Iterator对象称作迭代器,Iterator接口方法能以迭代方式逐个访问集合中各个元素,并可以从Collection中除去适当的元素。

  6. Comparable接口
    Comparable可以用于比较的实现,实现了Comparable接口的类可以通过实现comparaTo方法从而确定该类对象的排序方式。

下面部分转自http://blog.csdn.net/jinhuoxingkong/article/details/51225641

一、关系

Collection

--List:以特定顺序存储

--ArrayList、LinkList、Vector

--Set:不能包含重复的元素

--HashSet、TreeSet

Map

--HashMap、HashTable、TreeMap

二、分别讲解

Collection:Collection是一个父接口,List和Set是继承自他的子接口,Collection是最基本的集合接口,Java SDK中不提供直接继承自Collection的类,而是提供继承自他子接口的类,如List和Set。所用的Collection类都支持一个Iterator()方法来遍历。

List:List接口是有序的,会精确的将元素插入到指定的位置,和下面的Set接口不同,List接口允许有相同元素

ArrayList:实现可变大小的数组,允许所有的元素,不是同步的,也就是没有同步方法

LinkList:允许null元素,通常在首部或者尾部操作,所以常被使用做堆栈(stack)、队列(queue)和双向队列(deque)

Vector:类似于ArrayList,但Vector是同步的,Stack继承自Vector

Set:是一种不包含重复元素的Collection接口

HashSet:不能有重复元素,底层是使用HashMap来实现的

Map:此接口实现的Key到Value的映射,一个Map中不能包含相同的Key,每个Key只能映射一个Value

   HashTable:实现了一个Key-Value的哈希表,每一个非null元素都可作为Key或者Value,HashTable是同步的

   HashMap:和HashTable的不同之处是,非同步的,且允许null元素的存在

三、Array和Arrays   Collection和Collections

Array:是所以随机访问一串对象中,最有效率的一种,但是元素类型必须相同,且容量固定无法改变。

Arrays:此静态类专门操作array,提供搜索、排序、复制等静态方法

Collection:Java.util下的一个接口,是各种集合结构的父接口

Collections:Java.util下的一个专用静态类,他包含各种集合操作的静态方法,包括对集合的搜索、排序、线程安全等操作。

四、总结

涉及到堆栈、队列等操作,使用List接口,快速插入和删除应使用LinkList,随机访问元素使用ArrayList

单线程使用非同步类,多线程使用同步类

注意对HashTable的操作,作为Key的对象要覆写equals和hashCode方法

在各种Map中HashMap用于快速查找

最长使用的是ArrayList、HashSet、HashMap、Array

 

原文地址:https://www.cnblogs.com/conswin/p/6716465.html