`

List的有用实现 1.ArrayList 2.LinkedList 3.Vector 4.Stack

 
阅读更多

*
 * 
 * List的有用实现 1.ArrayList 2.LinkedList 3.Vector 4.Stack
 * 
 * 讨论1:底层机制(牵扯到的数据结构的知识请读者自行复习)
 * ArrayList与Vector都是基于数组实现的,这就说明ArrayList与Vector适合做遍历而不适合做频繁的插入和删除。
 * vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用arraylist效率比较高。
 * 如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.
 * 如过在集合中使用数据量比较大的数据,用vector有一定的优势
 * LinkedList是基于链表实现的,所以它生来就是为了频繁插入与删除对象。
 * 
 * 讨论2:特殊功能 Stack是一个后进先出(LIFO)对象堆栈,而LinkedList除可以被用作堆栈外,还可以被用作队列或双端队列。
 * 不同的是Stack继承自Vector,也就是说它也是基于数组实现的。
 * 
 * 讨论3:内存占用 基于数组实现的List,在动态扩展时会产生新的数组,然后把旧数组里的内容复制到新数组里,
 * 这会产生大量的不再被使用的对象引用变量等待系统回收。而基于链表实现的List就不会有这种问题。
 * 
 * 讨论4:同步问题 Vector与Stack生来就是同步的,
 * 而ArrayList与LinkedList需要使用Collections.synchronizedList(List list)方法来转换成同步List。
 * 从它们的对象上返回的迭代器是快速失败的,也就是说在使用迭代器进行迭代的时候,必须使用迭代器本身的remove、add、set
 * 方法来添加或更改List元素,如果在迭代的同时,在其他线程中从结构上修改了List(结构上的修改是指任何添加或删除一个或多
 * 个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改),快速失败迭代器会尽最大努力抛出ConcurrentModificationException。
 * 
 * 讨论5:使用策略
 * 如果数据被从数据源提取,数据量不确定,该数据一经被提取后就几乎不会再添加或删除,那么应该建立一个LinkedList来保存从数据源中取出的数据,然后将
 * 该LinkedList转换成ArrayList来优化遍历操作。反过来,数据量确定的数据从数据源取出可以先建立一个ArrayList来保存,根据需要如需频繁增删,就转换为LinkedList,
 * 如频繁遍历就不需转换。
 * 转换的方法就是使用对应的List类来封装目标List对象。
 * 如 ArrayList al = new ArrayList(); 
 * LinkedList ll = new LinkedList(al); 
 * 同理反过来也可以 LinkedList ll = new LinkedList(); 
 * ArrayList al = new ArrayList(ll);
 * 
 * 讨论6:toArray()方法
 * 基于数组实现的List会直接返回一个底层数组的拷贝(使用了System.arraycopy方法),基于链表实现的List会新生成一个数组。
 * 
 * 讨论7:不可修改 通过使用Collections.unmodifiableList(List
 * list)来生成一个不可修改的List,试图修改返回的列表,不管是直接修改还是通过其迭代器进行修改,都将导致抛出UnsupportedOperationException。
 * 
 * 讨论8:遍历器 请尽量使用Iterator,Enumeration已不被鼓励使用。
 */

分享到:
评论

相关推荐

    Java 面试宝典

    4、在 JAVA 中如何跳出当前的多重嵌套循环? .......................................................... 8 5、switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上? .. 9 6、short s1 = ...

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    java8 源码 List相关实现类的源码解析(JDK1.8) ...通过modCount的值来判断是否多线程同时操作,modCount用来记录List修改的次数:每修改一次(添加/删除等操作),将modCount+1 LinkedList 继承关系: LinkedLis

    JavaSE 笔试 精华

    Collection List LinkedList ArrayList Vector Stack Set HashSet Map HashMap Dictionary Hashtable Comparetor 2. Vector和ArrayList、LinkedList区别? Hashtable 和 HashMap之间的区别 LinkedList内部以链表...

    List效率的比较

    让Stack 来做List 的事可以,不过语义上Stack 不应该做过多的List 的事情;  7.在排序中,ArrayList 具有最好的性能,TreeList 平均性能也不错,LinkedList 的排序效率受元素初始状态的影响很大。  8.各种List 间...

    集合效率不完全皮恩车

    AttributeList , ArrayList , CopyOnWriteArrayList , LinkedList RoleList , RoleUnresolvedList , Stack Vector Set接口 ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet…, HashSet JobStateReasons , ...

    跟汤老师学Java(第13季):集合

    4.List:ArrayList、LinkedList、Vector、Stack 5.Set:HashSet、TreeSet 6.Map:HashMap、Hashtable、Properties 7.Collections工具类 教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    java面试题

    4. 说出ArrayList,Vector,LinkedList的存储性能和特性 8 5. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 9 6. Collection 和 Collections的区别。 9 7. &...

    java基础题 很全面

    6. 说出ArrayList,Vector, LinkedList的存储性能和特性。 7 7. Collection 和 Collections的区别。 7 8. &和&&的区别。 8 9. HashMap和Hashtable的区别。 8 10. final, finally, finalize的区别。 8 11. sleep() 和 ...

    Java集合总结.txt

    List -- List接口(添加了许多针对下标操作的方法) 特点:有序的,且可重复 ArrayList: 数据结构:一维数组 LinkedList: 数据结构:双向链表 Vector: 数据结构:一维数组 Stack: 数据...

    Java 基础核心总结 +经典算法大全.rar

    ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 PriorityQueue HashMap TreeMap 类 LinkedHashMap 类 Hashtable 类IdentityHashMap 类WeakHashMap 类 Collections 类集合实现类特征图 泛形 ...

    了解Collection 和 Collections

    Collection接口在Java 类库中有很多具体的实现。 Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式, 其直接继承接口有List与Set。 Collection ├List │├LinkedList │├ArrayList │└Vector ...

    java面试宝典2012版.pdf

    64、说出ArrayList,Vector, LinkedList的存储性能和特性 65、去掉一个Vector集合中重复的元素 66、Collection 和 Collections的区别。 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是...

    各种集合的总结

    总结了集合中常用的一点点,希望可以共享 List:LinkedList,ArrayList,Vector(Stack),Set Map:Hashtable,HashMap,WeakHashMap

    最新Java面试宝典pdf版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    Java面试笔试资料大全

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    java面试宝典

    67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现...

    浅谈java集合类以及示例

    聊一聊java 的集合类 概述 Java中集合分为两种类型 ...List下常用的有ArrayList、LinkedList、Vector、Stack Set下常用的有HashSet、TreeSet Queue又有Deque、Stack、LinkedList SET ​ 无序不可重复,没有下标。规定S

Global site tag (gtag.js) - Google Analytics