黑马程序员技术交流社区
标题:
集合的一些问题
[打印本页]
作者:
唐溪永
时间:
2012-2-20 13:23
标题:
集合的一些问题
ArrayList,Vetor,Linkedlist的存储性能和特性。还有是HashMap和Hashtable的区别
作者:
何招俊
时间:
2012-2-20 13:59
Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
作者:
陈伟
时间:
2012-2-20 14:02
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
作者:
王康
时间:
2012-2-20 14:20
楼主,有些知识点已经被提过好多遍了,可以多浏览一下论坛中的帖子.
JDK API是很好的帮助工具.
作者:
【专】【属】
时间:
2012-2-20 14:25
ArrayList:底层是用一个Object的数组去实现的,所以在存取的速度快,而对于删除的操作时效率低。
Vetor:可以说是AarrayList的一个前身吧,不过是一个线程同步的,速度上就慢了。
Linkedlist:底层是用链表实现的,所以在删除时速度快,而在存取时比ArrayList慢了。
HashMap:是线程异步的,效率高。是HashTable的替代者,推荐使用它,不推荐使用HashTable.
Hashtable:线程同步的,效率低。
作者:
陈丹阳
时间:
2012-2-20 14:28
toArray
public <T> T[] toArray(T[] a)按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定的数组能容纳列表,则将该列表返回此处。否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。
如果指定的数组能容纳队列,并有剩余的空间(即数组的元素比队列多),那么会将数组中紧接 collection 尾部的元素设置为 null。(仅 在调用者知道列表中不包含任何 null 元素时才能用此方法确定列表长度)。
指定者:
接口 Collection<E> 中的 toArray
指定者:
接口 List<E> 中的 toArray
覆盖:
类 AbstractCollection<E> 中的 toArray
参数:
a - 要在其中存储列表元素的数组(如果它足够大);否则,为此分配一个具有相同运行时类型的新数组。
返回:
包含列表元素的数组
我是来复制粘贴的 - -
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2