离弦之Ray

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks
Interfaces

有两种主要的Collection Types
java.util.Map
java.util.SortedMap
java.util.Collection
java.util.Set
java.util.List
java.util.SortedSet


Implementations

List的三种实现

java.util.Vector
java.util.ArrayList
java.util.LinkedList

三者的异同
三者都是有序的,一般就是加入的次序。

        VectorArrayList内部都是用数组实现的,可以把它们想象成为一个数组。当容量不够的时候,就新建一个更大的数组,然后把现在这个数组中的所有元素都拷过去。可以想象这种实现可以很方便的直接取出你要的某个元素而不用遍历。但是如果在中间删除或者插入元素,效率就不高了。甚至每次扩容的时候,都是很影响效率的时候。

        VectorArrayList的区别就是Vector是线程安全的,但ArrayList不是。因为实现线程安全是有代价的,如果应用中不需要线程安全,那么就用ArrayList,如果需要线程安全那就一定要用Vector

至于java中的LinkedList,其实在数据结构中就是双向链表。插入和删除元素都很快,但是要查找一个元素就慢了。有失必有得,如何选择,就看应用的情况了。


MapSortedMap的几种实现

java.util.HashTable
java.util.HashMap
java.util.IdentityHashMap
java.util.WeakHashMap

        以上四种都是无序的。HashTableHashMap的区别是HashTable是线程安全的而HashMap不是,这个关系有点像VectorArrayList

        IdentityHashMap首先它是一个HashMap,不同的是,它不是根据equal()函数来判断是否重复,只要不是同一个对象,哪怕这两个对象的数据都是一样的,那么就可以add进来。


java.util.LinkedHashMap

java.uil.TreeMap

        以上两种是有序的Map,可以进行iterate,当然这是要付出效率代价的。两者不同之处,由名字便可知道,LinkedHashMap用链表来维护这个次序,而TreeMap是用二叉树来维护这个次序。

SetsSortedSets的几种实现

java.util.HashSet
java.util.LinkedSet
java.util.TreeSet

由名字就可知道什么意思了,不多说了

Collection的选择

        需要通过一个key找到一个元素吗?
        Yes,那就用Map
        No,那就用Collection

       如果选择了一个Collection,允许重复元素吗?
       Yes,那就用List
       No,那就用Set

       然后就是决定要不要Sorted...这个就比较难决定了。
       如果常常要sort,那就直接选择sorted的类型
       如果偶尔或者根本不需要sorted,那就选择普通类型,需要sort的时候先拷到sorted的类型中sort一下。

三种Iterators

java.util.Enumeration

这个基本被Iterator替代掉了,但在某些场合,比如J2ME中还可能用到。

java.util.Iterator

用的最广泛

java.util.ListIterator

双向的Iterator,必须用在实现ListCollection上面。


PS很多Collection提供的是Fail-Fast Iterators,就是在iterater的时候,这个Collection是不能被更改的,否则就会报出ConcurrentModificationException在多线程环境下面尤其要注意。


posted on 2007-10-26 21:14 离弦之ray的技术天空 阅读(752) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: