Java调集框架操纵注意事项(一, List)[Java编程]
本文“Java调集框架操纵注意事项(一, List)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
List的有效实现
1.ArrayList
2.LinkedList
3.Vector
4.Stack
谈论1:底层机制(牵扯到的数据构造的知识请读者自行复习)
ArrayList与Vector都是基于数组实现的,这就阐明ArrayList与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.util.Collections类,该类供应了很多有效的操作调集对象的办法.
以上是“Java调集框架操纵注意事项(一, List)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |