 |
| HashMap,HashTable,ArrayList,List,Vector的具体解释 |
|
sunvy 整理 更新:2008-04-26 18:54:22 版本: 1.0
|
|
最近在学习一些java基础的工具类,因为在使用struts做一个小东西,用到了ArrayList和HashMap,感觉用的时候有些疑惑,不知道该怎么选择,于是作了如下的一些总结: ▲HashMap,HashTable区别: Hashtable的方法是同步的,而HashMap则不是同步的(关于这一点,我理解不是很深,因为没有具体应用到这一点),不过HashMap可以通过Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。 HashTable不容许有空键,但是HashMap可以有一个空键和多个空值,可以使用containKey()来区别空键。 Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 基于HashMap的优越性,一般的我们在需要同步的时候也会使用HashMap,因为HashMap可以实现同步,而且操作方便,功能强于HashTable。 ▲ArrayList,List区别: List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。 ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。他是List的实现之一。 从这里我们可以看出HashMap是可以通过key来具体定位一个元素,相对比较简单的数据存储。而ArrayList则是一个有序的存储对象,他可以通过序号来定位元素,所以ArrayList用于处理复杂类型的对象是很方便的。 ▲Vector: Vector类似于ArrayList,Vector是同步的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用 Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。 Vector与ArrayList都是在集合的头部和尾部添加元素和删除元素比较方便,但是如果在集合中间添加删除元素就比较消耗资源,因为他们都是一种有序的集合。这是使用链接表linkedlist就比较方便。
这些我整理出来的,可能不很完善,但是学习一下还是有不少收获。
|
|
|
评论人:sunvy
|
发表时间: Wed Apr 30 15:34:37 CST 2008
|
我在jr上的第一篇文章,整理的,今天终于出来了 高兴,这代表我从以前的只知皮毛到开始进行较深入的了解了 这是一个跨越,哈哈。
|
|
|
评论人:sunvy
|
发表时间: Mon May 05 10:49:51 CST 2008
|
实际上从源码看来ArrayList的容量增长速度是 原来的容量大小*3/2 + 1 初始化为10,超过10,则其容量大小是 10*3/2 + 1 = 16
|
|
|
|
|
 |