`
晴空之羽
  • 浏览: 8465 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

三、表 栈和队列之Java Collections

阅读更多
Java Collections API
1.Collection接口
    Collection扩展了Iterable接口。
2.Iterator接口
    实现Iterable接口的Collection必须提供一个称为iterator的方法,该方法返回一个Iterator类型的对象。Iterator接口的目的在于:通过iterator方法,每个Collection都可以创建并返回一个实现Iterator接口的对象,并将当前位置在对象内部保存下来。例如,每次调用next(),都返回Collection的下一项,hasNext()用来返回是否存在下一项。
    Iterator适用于对Collection做简单遍历。Iterator的remove()可以删除next()返回的项,而要继续使用remove()必须再次调用next()。优于Collection的remove(),Iterator的remove()在于不必像前者一样先找出被删除的项,减少了开销。
    直接使用Iterator时需注意,如果对集合进行了add(),remove(),clear()等改变了数据结构的方法,再使用Iterator就用出现异常。这意味着,只有在需要立即使用迭代器的时候,才应该获取迭代器。

3.List、ArrayList和LinkedList
    List接口继承了Collection接口,并增加了一些其他方法,如get(),set(),size(),remove()等(常用方法,不多赘述)。
    List常用的实现方式有ArrayList和LinkedList。
    ArrayList类提供了一种List的可增长的数组实现。优点是:get(),set()方法时间复杂度为常数级,缺点是:插入和删除的花销较大(除非是在队尾进行)。ArrayList有其容量,表示基础数组的大小。需要时将自动增加其容量。
    LinkedList类提供了List的双链表实现。优点是:在表的前端进行添加和删除时间复杂度为常数级,缺点是:不容易作索引(除非很接近表的端点)。
    对搜索而言,ArrayList和LinkedList都是低效的。

4.remove()对LinkedList类的使用
例子:将List中所有的值为偶数的项删除。
    ArrayList的remove()花销过大,因此采用LinkedList。
    思路1:for循环内,先用get()获取值,判断是否为偶数,是则remove()。分析:get()花销较大,而且remove要找到第i个元素依旧有开销。
    思路2:用迭代器一步步遍历表,然后用collection的remove()删除偶数。分析:迭代器遍历是高效的,而collection的remove()不仅需要再次搜索该项造成效率低下,而且会产生异常。
    思路3:构造一个Iterator对象,当找到偶数值项后,用迭代器来删除刚看到的值。分析:对LinkedList来说,该迭代器的remove方法调用花费为常数时间,因为该迭代器位于需要被删除的节点。不过对于ArrayList来说,即使迭代器位于需要被删除的节点,其remove()仍花费较大。
    思路3的代码如下:
	public static void remove(List<Integer> list){
		Iterator<Integer> ite=list.iterator();
		while(ite.hasNext()){
			if(ite.next()%2==0)
				ite.remove();
		}
	}
}

分享到:
评论

相关推荐

    数据结构--表、栈、队列(java)

    本章节介绍了表、栈和队列三种重要的数据结构及其在Java中的实现方式。表作为一种灵活的线性数据结构,既可以基于数组也可以基于链表实现;栈和队列则是具有特定操作规则的特殊表。这些数据结构在算法设计和软件开发...

    栈和队列基本操作及练习

    在编程中,许多语言提供了内置的栈和队列数据结构,如Python的`collections.deque`可以作为双端队列,支持栈和队列操作,Java的`java.util.Stack`和`java.util.LinkedList`分别实现了栈和队列。此外,还可以自定义...

    数据结构 栈和队列的详细代码~

    在给定的压缩包文件中,"第3章 栈和队列"可能包含了关于这两种数据结构的更深入的理论介绍、实例分析以及具体的编程实现,包括但不限于C++、Java、Python等语言。通过学习这些内容,你可以更好地理解和掌握栈和队列...

    用栈和队列实现停车场管理

    在实现这个系统时,我们可以选择使用编程语言如Python、Java或C++,利用这些语言提供的数据结构库(如Python的`collections.deque`作为双端队列,用于实现栈和队列)。同时,为了提高效率和用户体验,可以考虑采用多...

    zhanheduilie.rar_栈和队列

    在编程语言中,许多内置的数据结构如Python的list和collections.deque可以作为栈的实现,而queue模块提供了队列的功能。C++标准库中的std::stack和std::queue则分别提供了栈和队列的接口。在Java中,java.util.Stack...

    栈和队列算法总集

    在实际编程中,许多编程语言提供了内置的栈和队列实现,如Python的`collections.deque`,Java的`java.util.Stack`和`java.util.Queue`接口,C++的`std::stack`和`std::queue`等。了解并熟练运用这些内置数据结构能...

    数据结构 栈和队列基本算法

    Python的标准库`collections`模块提供了`deque`双端队列,既可以作为栈也可以作为队列使用。 理解并熟练运用栈和队列是提升编程能力的关键步骤。通过实现这些基本算法,你可以更好地掌握数据结构的本质,并在解决...

    Java Collections.pdf

    Queue接口有LinkedList、ArrayDeque等实现,其中ArrayDeque性能优秀,适用于栈和队列操作。而Map接口的主要实现有HashMap、LinkedHashMap、TreeMap等。HashMap是基于哈希表的快速查找,不保证元素顺序;...

    栈和队列.zip

    如C++的STL(Standard Template Library)中的`stack`和`queue`,Java的`java.util.Stack`和`java.util.Queue`,Python的`collections.deque`等,这些库提供了封装好的栈和队列操作,方便开发者快速实现功能。

    数据结构和Java集合框架《Data Structures and the Java Collections Framework》

    常见的数据结构包括数组、链表、栈、队列、树、图等。理解这些数据结构的特性,如插入、删除、查找的时间复杂度,是编写高性能代码的基础。例如,数组提供了快速随机访问,但插入和删除操作相对较慢;而链表则在插入...

    2009年考研计算机学科专业基础综合考研复习指南“样稿”-栈和队列

    在编程语言中,很多都内置了栈和队列的抽象数据类型,如C++的std::stack和std::queue,Java的java.util.Stack和java.util.Queue,Python的collections.deque等,方便开发者快速构建算法和数据处理逻辑。 在准备2009...

    java的Collections教程

    线性结构是数据结构的一种,包括线性表、栈、队列和串等。在Java中,ArrayList和LinkedList是线性结构的具体实现。ArrayList基于动态数组实现,适合随机访问但插入和删除元素相对较慢;LinkedList则基于链表实现,...

    常用数据结构及其算法的Java实现,包括但不仅限于链表、栈,队列

    在IT领域,数据结构和算法是编程的基础,也是软件工程师必备的技能之一。Java作为一种广泛使用的编程语言,提供了丰富的库支持来实现各种数据结构和算法。本资源包含了一系列常用数据结构及其算法的Java实现,旨在...

    数据结构与算法MOOC 第3周 栈与队列 参考代码

    在实际编程中,还可以使用现成的库如C++的STL(Standard Template Library)中的`stack`和`queue`容器,Python的`collections.deque`等来快速实现栈和队列的功能。不过,理解底层原理对于优化算法和解决问题至关重要...

    [Java泛型和集合].(Java.Generics.and.Collections).文字版

    4. **模板设计**:泛型使得创建通用算法和数据结构成为可能,如泛型栈和泛型队列。 **Java集合框架** 是一组接口和类,它们提供了一种组织和操作对象群体的方式。主要集合接口包括: 1. **List**:有序的、允许...

    数据结构和Java集合框架

    Java集合框架还包括工具类,如Collections和Arrays,提供了一些静态方法,用于集合的排序、复制、比较等操作。此外,Java 8引入了流(Stream)API,提供了新的处理集合数据的方式,支持并行操作,使得代码更加简洁、...

    利用队列和栈实现的简单停车管理系统

    例如,Python的`collections.deque`可以方便地创建双端队列,而Java的`LinkedList`可以轻松实现队列和栈的功能。 总之,通过队列和栈的结合应用,我们可以设计出一个简单的停车管理系统,它不仅能满足基本的停车...

    commons-collections-3.2.jar

    9. **堆栈和队列**:扩展了Java内置的栈和队列接口,提供了更丰富的操作和性能优化的实现。 10. **工具类**:包含一些通用的实用工具,如集合的深度拷贝、序列化和反序列化、对象的克隆等。 在实际开发中,...

    java算法学习手册

    Java中,ArrayDeque可以作为高效的栈和队列。队列则按照“先进先出”(FIFO)规则,适用于任务调度或消息传递,如Java的LinkedList可以被用作队列。 3. **排序与查找**:排序算法包括冒泡、选择、插入、快速、归并...

Global site tag (gtag.js) - Google Analytics