- 浏览: 57404 次
- 性别:
- 来自: 广州
文章分类
LinkedList的Iterator 的性能颈瓶:
对于Iterator 的next每次都会返回一个LinkedList的内部类return new ListItr(index),然后调用这个内部类的next方法。
而ListItr(index)每次初始化时都时从头指针开始从新定位的,所以对于海量数据的遍历时,性能是非常糟糕的,尽管其做了折半的查找优化。
ListItr的初始化代码如下:
这个LinkedList作者是Josh Bloch,版本是version 1.61, 02/19/04,不知道之后的版本是否做了改进。
对于Iterator 的next每次都会返回一个LinkedList的内部类return new ListItr(index),然后调用这个内部类的next方法。
而ListItr(index)每次初始化时都时从头指针开始从新定位的,所以对于海量数据的遍历时,性能是非常糟糕的,尽管其做了折半的查找优化。
ListItr的初始化代码如下:
ListItr(int index) { if (index < 0 || index > size) throw new IndexOutOfBoundsException("Index: "+index+ ", Size: "+size); if (index < (size >> 1)) { next = header.next; for (nextIndex=0; nextIndex<index; nextIndex++) next = next.next; } else { next = header; for (nextIndex=size; nextIndex>index; nextIndex--) next = next.previous; } }
这个LinkedList作者是Josh Bloch,版本是version 1.61, 02/19/04,不知道之后的版本是否做了改进。
发表评论
-
跨域iframe高度自适应 兼容IE/FF/OP/Chrome浏览器
2012-03-26 12:39 1166转自:http://www.5icool.org/ ... -
程序中调用jdbc访问oracle不可以有英文分号
2011-08-09 17:16 2000今天也遇到下文的问题,主要是多了个";"的 ... -
mvnform权限系统
2011-07-21 16:26 939mvnforum权限系统分析 mvnforum ... -
iphone safari 样式
2011-02-22 22:07 0转自:http://kinvix.kdv.cn/blog/?p ... -
文件格式及相关的response.contentType
2011-02-17 16:17 1175转自:http://blog.sina.com.cn/s/bl ... -
url最大长度问题
2011-01-27 10:15 1431转自:http://j2ees.iteye.com/blog/ ... -
JAVA 中URL链接中文参数乱码的若干处理方法
2011-01-25 18:43 1179转自:http://www.sudu.cn/info/html ... -
js中刷新页面总结
2010-09-16 13:31 1553转自:http://hi.baidu.com/kbsy/blo ... -
图片自动缩放 js图片缩放
2010-09-10 19:03 1779文章转自:http://hi.baidu.com/crysta ... -
HTML 标签属性列表
2010-07-02 10:43 657标签属性 属性 描述 ALIGN alig ... -
Java核心API需要掌握的程度(转)
2010-04-17 17:15 628Java的核心API是非常庞的,这给开发者来说带来了很的方便, ... -
非阻塞I/0(转)
2010-04-17 17:10 1038文章转自:http://www.100ks ... -
GWT小结
2010-04-01 14:35 0GWT支持java.lang和java.util包的子集,还支 ... -
JDom小结
2010-04-01 14:23 0JDom包的结构: org.JDom ... -
java集合类的研究
2010-03-16 16:36 645HashSet的初始容量时16,其增长的基数时2,也就是说,当 ... -
Java:集合类性能分析【转】
2010-03-16 15:26 884这篇文章是转的,暂时没有验证文章中的正确性,我有时间会一一验证 ... -
HTTP错误请求代码一览[http,response,error code]
2010-03-10 11:40 3082static int SC_ACCEPTED ... -
ejb的entitybean中使用动态的sql
2010-03-05 15:06 763由于接触EJB的时间比较短,一直都十分好奇,如何使用容器来执行 ... -
RMI原理概要
2010-02-24 13:30 674其中远程对象要实现remote接口以及序列化接口。客户端值 ... -
java获取系统属性
2010-02-24 09:13 631java.version Java 运行时环境版本 jav ...
相关推荐
ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...
在实际应用中,应根据具体需求选择合适的数据结构,如ArrayList或LinkedList,以达到最佳性能。在提供的JiHe6.java源代码中,可能包含了关于LinkedList添加删除操作的示例实现,通过阅读和理解代码,可以进一步加深...
然而,在`LinkedList`等其他类型的集合中,`Iterator`的性能表现可能会优于传统的循环结构。 综上所述,`Iterator`提供了一种灵活、安全且易于使用的集合遍历方式,是Java编程中不可或缺的一部分。无论是从设计模式...
通过分析源码,你可以更好地了解其在不同场景下的性能表现,以及如何优化LinkedList的使用以提高程序效率。 总之,LinkedList是一种重要的数据结构,理解其工作原理和特性对于提升Java编程能力至关重要。通过学习和...
8. 性能分析: 由于LinkedList的所有插入、删除操作都需要改变节点的引用,所以其在随机访问和修改时的性能不如ArrayList。但在需要频繁插入、删除元素且对元素顺序有特定要求的情况下,LinkedList的性能更优。 9. ...
### LinkedList的用法详解 #### 一、简介 在Java集合框架中,`LinkedList`类是一种基于链表实现的线性数据结构,继承自`...理解这些方法的使用场景可以帮助开发者更好地利用`LinkedList`来构建高性能的应用程序。
5. **迭代器**: LinkedList实现了Iterator接口,提供`iterator()`方法用于遍历列表。LinkedList的迭代器允许我们按顺序遍历元素,同时支持`hasNext()`、`next()`和`remove()`操作。与ArrayList不同,LinkedList的...
`list()`方法用于将查询结果转换为Java集合,通常是ArrayList或LinkedList。这种方法一次性将所有结果加载到内存,适用于结果集较小的情况。如果结果集过大,可能会导致内存溢出。 4. **iterator()方法** `...
- `LinkedList`:基于双向链表实现,不适合随机访问,但在插入和删除操作上表现优异。 - `Vector`:线程安全的 `List` 实现。 #### Set 接口 - **定义**:`Set` 是一种不允许重复元素的集合。 - **实现类**: -...
通过迭代器,我们可以方便地遍历和修改LinkedList中的元素,同时避免了数组或ArrayList在插入和删除操作时的性能问题。在实际开发中,根据具体需求选择合适的数据结构和遍历方式是提高代码效率的关键。
**Java系列LinkedList** 链表是一种基础数据结构,它在计算机科学中扮演着重要角色,特别是在Java编程中。链表不按照线性顺序存储数据,而是每个...了解`LinkedList`的工作原理和用法对于优化Java程序性能至关重要。
在性能方面,遍历链式存储(如LinkedList)的集合时,由于需要不断查找下一个元素,性能通常低于基于数组的集合(如ArrayList)。而在内存安全方面,所有这些遍历方法都需要确保不会在遍历过程中改变集合的大小,...
- 由于节点之间的链接是通过指针实现的,因此`LinkedList`的插入和删除操作通常比基于数组的`ArrayList`更快,但随机访问性能较差。 2. **自定义节点类** - 在扩展`LinkedList`功能时,我们可能需要创建自定义...
- **遍历**:由于LinkedList是有序的,可以使用迭代器`Iterator`进行遍历,或者通过`get(index)`获取指定位置的元素。 - **搜索元素**:使用`indexOf(object)`查找元素的位置,`contains(object)`检查元素是否存在...
因此,当需要频繁进行遍历操作时,尤其是对大型数据集,LinkedList更适合使用迭代器(Iterator)进行遍历,因为迭代器设计就是为了优化链表的遍历性能,它可以直接访问下一个元素,而不需要从头开始查找,这样可以将...
6. **迭代器的使用**:如果移除元素的逻辑较为复杂,可以考虑自定义迭代器并使用`Iterator.remove()`,这有时能提供更好的性能控制。 在实际开发中,为了优化`removeAll()`的性能,可以进行以下实践: - 选择合适...
LinkedList还可以通过`linkedListIterator()`方法获取一个ListIterator,这个迭代器可以双向移动,既可以向前也可以向后遍历列表。此外,LinkedList还实现了Deque接口,因此可以作为双端队列使用,支持从两端添加和...
Iterator 迭代器可以用来遍历各类型的集合,包括 ArrayList、LinkedList、HashSet 等。 删除集合重复选项的方法 要删除集合中的重复选项,可以使用 Iterator 迭代器来遍历集合,并在遍历过程中删除重复的元素。...
Iterator<String> iterator = linkedList.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } ``` ### 结论 Java集合框架为开发者提供了丰富的数据结构选择,可以根据具体的应用...