`
晴空之羽
  • 浏览: 8193 次
  • 性别: 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期末复习-类集框架

    List接口、ArrayList类、Vector类、栈操作类Stack、链表操作类LinkList、队列操作接口Queue、Set接口、HashSet类、TreeSet类、SortedSet接口 双值操作接口Map(key-&gt;value)及其子接口、子类: SortedMap接口、HashMap...

    AIC的Java课程1-6章

     培养和建立面向对象编程的思维方式,可以运用封装、继承和多态三大基本特性编写面向对象的程序。  理解和应用Java异常,常用类,IO,集合和多线程等开发技术。  课时安排  总学时:52学时 ...

    DataStructureJava:主要数据结构——java中的简单实现

    -&gt; JDK(Java集合)-&gt; Guava(谷歌)-&gt; Commons-collections(Apache) 主要抽象数据结构——ADS列表(ArrayList、LinkedList、Vector)栈(FIFO)队列(LIFO、Deque——双端队列) interface Map&lt;Key&gt; TreeMap&lt;K&gt; ...

    Java开发技术大全 电子版

    第7章Java的输入和输出237 7.1文件和输入输出流237 7.2InputStream类和OutputStream类的使用238 7.2.1InputStream中的方法238 7.2.2OutputStream中的方法239 7.2.3文件输入流FileInputStream239 7.2.4文件输出...

    java范例开发大全源代码

     实例70 求方阵对角线之和 96  实例71 矩阵的加法 97  实例72 矩阵的减法 98  实例73 快递报价单 99  5.3 数组的排序 101  实例74 冒泡排序法 102  实例75 数组递增排序 103  实例76 部分数组...

    java范例开发大全

    实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数组递增排序 103 实例76 部分数组递增排序 103 实例77 选择排序法...

    Java范例开发大全 (源程序)

     实例70 求方阵对角线之和 96  实例71 矩阵的加法 97  实例72 矩阵的减法 98  实例73 快递报价单 99  5.3 数组的排序 101  实例74 冒泡排序法 102  实例75 数组递增排序 103  实例76 部分数组递增...

    Java范例开发大全(全书源程序)

    实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数组递增排序 103 实例76 部分数组递增排序 103 实例77 ...

    java范例开发大全(pdf&源码)

    实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数组递增排序 103 实例76 部分数组递增排序 103 实例77 选择排序法...

Global site tag (gtag.js) - Google Analytics