java集合类自我小结

Collection -- List--LinkedList

                  --ArrayList

                  --Vector

           -- Set

Map     -- HashMap

        -- HashTable

        -- WeakHashMap

 

 

 

 

 Collection接口:

       Collection是最基本的集合类接口,一个collection代表一组object。jdk提供的类都是继承自Collection的子接口如        List,Set。所有实现Collection接口的类都必须提供两个标准的构造函数:一个无参,一个有参。实现类都支持一个        Iterator()方法,进行迭代可访问Collection中的每一个元素:

              Iterator it = collection.iterator()

              while(it.hasNext()){

                   Object obj = it.next();

              }

   List接口:

             list是有序的Collection,使用此接口可以保证插入的位置。用户可以使用索引来查找元素,类似于数组。除了        Collection的iterator(),List接口还提供一个listIterator()方法,返回一个ListIterator接口,和标准Iterator

       接口相比,允许添加,删除,设定元素,向前后遍历。List接口的常用类:ArrayLsit,LinkedList,Vector,Stack。

       

       ArrayLsit

             实现了可变大小的数组,它允许所有的元素,包括null。ArrayList不是同步的。 手动实现同步:

       List list = Collections.synchronizedList(new ArrayList(...));

       LinkedList

             允许null元素,另外提供了get,remove,insert方法再LinkedList首部或尾部。这些操作可以使LinkedList堆        栈(stack),队列(queue)或双向队列(deque)。没有事相同步,多线程访问LinkedList时候需要自己实现同步:

       List list = Collections.synchronizedList(new LinkedList(...));

       Vector

             类似于ArrayList,实现了先进后出的堆栈。实现了同步。当一个Iterator被创建且正在使用,另一个线程改变        了 Vector的状态(添加或删除元素),调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕        获该异常。

       Stack

             Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基        本的push和pop 方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈        中的位置。Stack刚创建后是空栈。

   

   Set接口:

       Set接口不包含重复元素,并且是无需的。

Map接口:

      没有继承Collection接口,提供Key-Value的映射,不能包含相同的key。key与value是一对一的关系 。

   HashTable:

      实现了一个KEY-VALUE映射的哈希表,是同步的。不允许有空值null。通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。

   HashMap类:

      与HashTable类似,不同之处在于非同步的。并且允许null值,null-key,null-value。

   WeakHashMap类:

      WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,一个key不再被外部所引用,那么该key可以被GC回收。

总结:

    List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

    多个线程操作时注意使用同步的类,或者将不同步的类转化为同步的类。

   要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。

    尽量返回接口而非实际的类型,如返回List而非ArrayList,LinkedList等。

同步性:

    Vector是同步的,ArrayList是异步的,效率上来讲不考虑同步的话使用ArryList。内部实现机制都是使用的数组。缺省vector每次增长100%,ArrayList为50%。保存大量数据的话vector会有优势。也可以设置初始大小避免资源不必要的开销。

    LinkedList基于链表实现。插入或者操作有优势。不过也要看实际情况,针对单条数据是,linkedList不如ArrayList快。

    HashMap与HashTable

    一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

    二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

    三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

      

             

猜你喜欢

转载自lxlr123.iteye.com/blog/2177981