集合类

集合:

    集合包是最常用的包,最常用的有Collection和Map两个接口的实现类,Collection用于存放多个单对象,Map存放k-v形式。

    Collection常用的有List和Set

    List常用实现ArrayList,LinkedList,Vector,Stack

    Set常用实现HashSet,TreeSet

    1,ArrayList采用数组实现,默认大小10

        1)Add时,会扩容,Remove时不会减小数组容量,TtrimToSize()

        2)查找元素时遍历数组,对于非null元素,采用equals方式寻找

        3)ArrayList是非线程安全的

    2,LinkedList采用双向链表

        1)Add时会先创建一个新的Entry对象

        2)非线程安全

    3,Vector

        1)与ArrayList一样,采用数组实现,默认大小为10, capcacityIncreament=0

        3)与ArrayList不一样的是,扩容时,capcacityIncreament>0时,扩大为现有数组+capcacityIncreament;当capcacityIncreament<=0时,扩大为现有数组2倍

        2)线程安全,add,revmove,get,contains中的indexOf时synchornized

    4,Stack

        1)继承于Vector,在基础上增加push,pop,peek操作; 

        2)push调用add操作    

        3)pop调用peek获取元素,同时删除数组最后一个元素

        4)peek获取当前数组大小,取得最后一个元素

        5)基于Vector实现的FILO

    5,HashSet

        1)基于Set接口实现,Set与List最大区别就是Set不允许重复元素,为了不允许重复元素出现,采用HashMap来实现;

        2)非线程安全

    6,TreeSet

        1)与HashSet的区别在于,TreeSet支持排序,TreeSet采用TreeMap实现

        2)非线程安全

    7,HashMap

        1)Map的常用实现

        2)loadFactor=0.75,threshold临界值=12,默认创建size=16的Entry对象数组

        3)非线程安全

    8,TreeMap

        1)支持排序的Map

        2)基于红黑树实现,无容量限制

        3)非线程安全

性能:

    List实现,随着元素数量的上升,查找,删除性能下降明显。

    Set,Map基本不会受影响。

适用场景:

    ArrayList适用于按位置来读取元素的场景,LinkedList适用于头尾操作及插入指定位置的场景,Vector适用于线程安全的ArrayList场景,Stack适用于线程安全的LIFO场景,HashSet适用于没有重复,不排序场景,TreeSet适用于没有重复,排序场景,HashMap适用于大多数kv场景,TreeMap适用于kv,排序场景。

你可能感兴趣的:(集合类)