统计

留言簿(1)

DB

Others

QA

Tech Website

阅读排行榜

评论排行榜

Java集合框架比较


 

数组类ArrayJava中最基本的一个存储结构。它用于存储一组连续的对象或基本类型的数据。其中的元素的类型必须相同。

Array是最有效率的一 种:

1、效率高,但容量固定且无法动态改变。 Array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们Array的容量。

2Java中有一个Arrays类,专门用来操作Array,提供搜索、排序、复制等静态方法。 equals():比较两个Array是否相等,Array拥有相同元素个数,且所有对应元素两两相等。 fill():将值填入Array中。 sort():用来对Array进行排序。 binarySearch():在排好序的Array中寻找元素。 System.arraycopy()Array的复制。

Java Collections Framework成员主要包括两种类型,即:CollectionMap类型。 Java中提供了CollectionMap接口。其中ListSet继承了Collection接口;VectorArrayList LinkedList三个类实现List接口,HashSetTreeSet实现Set接口,HashTableHashMap TreeMap实现Map接口。由此可见,Java中用8种类型的基本数据结构来实现其Collections Framework;下面分别进行介绍。

Vector:基于ArrayList,性能也就不可能超越Array,并且Vector"sychronized",这个也是VectorArrayList的唯一的区别。

ArrayList:同Vector一样是一个基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但 是当运行到多线程环境中时,可需要自己在管理线程的同步问题。从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快。

LinkedListLinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node 都包含两方面的内容:

1、节点本身的数据(data);

2、下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候 就不用像基于ArrayList一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了所以它适合于进行频繁进行插入和删除操 作。这就是LinkedList的优势。Iterator只能对容器进行向前遍历,而 ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。

List总结:

1、所有的List中只能容纳单个不同类型的对象组成的表,而不是KeyValue键值对。例如:[ tom,1,c ]

2、所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]

3、所有的List中可以有null元素,例如[ tom,null,1 ]

4、基于ArrayListVectorArrayList)适合查询,而LinkedList(链表)适合添加,删除操作

HashSet:虽然SetList都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是 Set则是在HashMap的基础上来实现的,这个就是SetList的根本区别。HashSet的存储方式是把HashMap中的Key作为Set 对应存储项,这也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMapkey是不能有重复的。HashSet能快速定位 一个元素,但是放到HashSet中的对象需要实现hashCode()方法0

TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要重复定义相同的排序算法,只要实现Comparator接口即可。TreeSetSortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。

Set总结:

1Set实现的基础是MapHashMap);

2Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象; Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? Set里的元素是不能重复的,即不能包含两个元素e1e2e1.equalse2))。那么用iterator()方法来区分重复与否。 equals()是判读两个Set是否相等。==方法决定引用值(句柄)是否指向同一对象。

HashMapTreeMapHashtable

1HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它有一些扩展的方法,比如 firstKey(),lastKey()等。

2Hashtable:不允许空(null)键(key)或值(value),Hashtable的方法是Synchronize的,在多个线程访问 Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 HashtableHashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

3HashMapHashtable的区别:HashMapHashtable(线程案例的)的轻量级实现(非线程安全的实现),他们都完成了Map接口。主要区别在于HashMap允许空(null)键key)或值(value,非同步,由于非线程安全,效率上可能高于Hashtable

Map总结:

是一种把键对象和值对象进行关联的容器,Map有两种比较常用的实现: HashTableHashMapTreeMap

posted on 2011-03-07 14:25 XXXXXX 阅读(1571) 评论(0)  编辑  收藏 所属分类: Programing


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


网站导航: