ArrayList是1。0版本以前的数据存储方式,那时的存储方式都进行了同步[
处理,也就是可以防止在多线程下几个线程同时访问一个数据,缺点是速
度慢,而LinkList是1.0版以后的数据存储方式,优点是速度快,但没有实
现同步,所以如果在你的程序中不牵扯到同步问题,最好还是用LinkList
处理,也就是可以防止在多线程下几个线程同时访问一个数据,缺点是速
度慢,而LinkList是1.0版以后的数据存储方式,优点是速度快,但没有实
现同步,所以如果在你的程序中不牵扯到同步问题,最好还是用LinkList
ArrayList 是在1.2版本定义,作为一个常规用途的对象容器使用,用于替换1.0版本中的Vector,不同步,用于快速访问元素。
请先搞清楚ArrayList和Vector的区别,ok:)
的优点在于查询,因其基于数组,而LinkList优点在于删除修改,因其基于
双向链表。
多谢linetsam() 提醒。
这样却是LinkedList的长处。在这儿只想比较ArrayList和LinkedList的特性。
如果想对一数据集进行随机增删,并要进行循环读取,将LinkedList和ArrayList结合使用是否
能保证效率? addAll()方法是否为带来较大开销? 请大家关注最上的四个问题。
2,转换开销应该是一样的,因为addall()这个方法在collection里就具体实现,非要深究,我 认为ArrayList.addAll(LinkedList)比LinkedList.addAll(ArrayList)要快,因为linklist总是比arraylist在整体遍历上好,唯一的缺点是linklist总是从头接点开始,所以随机操作很差
3。你的答案是对的,是最好的方式。但里边有一个addall(),小数据量时千万别用,小数据量时一个addall()是开销很多的
4。不知道vector与arraylist是一模一样的,唯一的不同是arraylist内部实现的机智是通过链表实现的,而vector不太清楚,所以arraylist一般比vector要快,是vector的替代产物关于同步性,比c++的stl要差的多,java的collection是用一种简单的方法实现的,就是在对collection节点修改时,在该节点进行锁操作,但要注意,set方法不属于锁操作,锁操作主要指添加删除操作更详细的内容,请见《java核心II》
是指的什么?如果做集合从头到尾扫描,ArrayList速度应该比LinkedList快20倍以上。--"但里边有一个addall(),小数据量时千万别用,小数据量时一个addall()是开销很多的"
为什么小数量会开销很多,而大数量却不会?能否谈谈addAll()的具体行为?--"vector与arraylist是一模一样的,唯一的不同是arraylist内部实现的机智是通过链表实现的,而vector不太清楚,所以arraylist一般比vector要快,是vector的替代产物"
Vector和ArrayList都应该是数组后推,主要区别应该是否同步。而LinkedList才是通过双向链表
实现。