首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

普普通通集合类

2012-10-28 
普通集合类1:Collection接口:存放单个对象.-List- ArrayListArrayList是以数组创建,填满的时候扩容是根据1

普通集合类
1:Collection接口:存放单个对象.
    -List
       - ArrayList
         ArrayList是以数组创建,填满的时候扩容是根据1.5+1,不过之前需要跟原数组大
         小 +1(minCapacity)比较,以大的为最新数组的容量。
         1:缩小容量用trimToSize();
         2:对非NULL用equals的方式寻找;
         3:非线程安全;

       - LinkedList
         LinkedList基于双向链表机制实现,一个entry有previous,next指向。查找和删除
         都须要遍历链表,非线程安全。

       - Vector
         Vector跟ArrayList基本原理一样,但在各个方法加了synchronized,所以线程安
         全.扩容方法也不同,Vector有一个参数capacityIncrement,  
         当capacityIncrement>0的时候,扩大为size+capacityIncrement。如果=<0,就扩
         大为size的两倍。

       - Stack
         Stack继承于Vector,在Vector的基础上实现后进先出(LIFO),提供
         push,pop,peek(获取最后一个元素).

     -Set
        Set和List最大的区别是Set不可以放重复的元素,HashSet,TreeSet不支持get(int).
       - HashSet
         基于HashMap实现,非线程安全。

       - TreeSet
         基于TreeMap实现,非线程安全,支持排序,可以传入Comparator



2:Map接口:key-value
      - HashMap
        HashMap是数组与链表的结合体,它有四个属性:
        key,value,hash,next.get(key)的时候首先通过key的hashcode查询,然后
        用key的equals找到在链表的具体位置。
         1:hash算法:hashcode & (lenght-1)取出在数组的位置。数组的长度都是2
            的n次方。new hashmap的时候会把数组容量对应到2的N次方;
         2:hashmap的三个因素:capacity,loadfactor,threshold;
            threshold=capacity*loadfactor(12=16*0.75);当元素超越
            threshold的时候会进行扩容resize.resize会重新计算现有元素的位置,
            所以比较耗性能,所以当知道多少元素的时候,可以初始它避免resize;如有
            1000个元素的时候,0.75*size>1000 和需要是2的N次方,所以size为
            2048,new HashMap(2048)
         3:对于key为null,会替换之前key为null的value,否则新建,next为第一个
           entry.所以get的时候对key为null的总拿第一个进行遍历。
         4:非线程安全,可以使用Collections.synchronizedMap。
   

      - TreeMap
        1:非线程安全。
        2:如果没有传入comparator,root非null,当key为null时候,抛出
           nullpointexception

热点排行