Java collection API 中实现的表ADT:

  collection<E>接口实现继承iterable<E>接口,实现iterable接口的类可以使用增强for循环,用于观察该类的所有项(带泛型的数组类型也是一样的原理),即可以在iterable类型的对象上使用增强for循环,编译器在遇到增强for循环时会使用一个迭代器来改写该for循环.

Iterator接口:

  实现Iterator接口的集合必须实现iterator()方法,用于返回一个Iterator的实现类对象,同时将当前位置的概念记录在对象内部.该对象的三个方法:hasNext()/next()/remove(),特别的remove()方法用于移除next()方法返回的最新的项,并且在次之后不能使用remove方法,直到再次使用next方法之后.

  并且建议使用迭代器的remove方法而不是collection的remove方法:

  • collection的remove方法需要提前获取被删除项的位置(如果已经知道,确实collection的remove方法消耗时间更少)
  • 在直接使用Iterator进行迭代时,需要避免在正在迭代的集合上修改集合的结构(插入/删除/clear()方法等),否则将会引发并发修改异常,特别的可以使用Iterator自己的remove()方法.

list(表)的两种实现:

  ArrayList提供可变数组的实现,因为底层为数组(存在索引),因此getIndex与set(index,E)时间为常数,但是插入与删除(特别是前端的插入与删除操作)具有巨大的开销,具体的在前端插入元素的时间复杂度为O(N);

  linkedList提供双链表实现,在插入与删除开销很小(位置是已知的),特别是在链表首尾进行操作,但是链表不容易做索引,因此get调用开销巨大(在链表的两端进行遍历),具体的单一的getIndex()调用的时间复杂度为O(N),但是如果使用增强for遍历全部,则获取全部元素的时间复杂度依然为O(N),因为迭代器将会有效的从前驱元推进至后继元;

  针对g检索来说,这两种数据结构的时间复杂度均为O(N),例如contains()/remove(E).

ListIterator接口:

  继承自Iterator接口,并添加了hasPrevious()/previous()/add()/set(),hasPrevious()返回当前位置是否有前驱元而previous()返回前驱元,与next()相对应,特别的add(E)将元E添加至当前位置,即添加至next()返回元素与previous()返回元素之间;set设置被迭代器所看到的最后一个元素.

arithmetic-02的更多相关文章

  1. General Decimal Arithmetic 浮点算法

    General Decimal Arithmetic http://speleotrove.com/decimal/ General Decimal Arithmetic [ FAQ | Decima ...

  2. Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...

  3. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  4. iOS系列 基础篇 02 StoryBoard 故事板文件

    iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...

  5. [LeetCode] Arithmetic Slices II - Subsequence 算数切片之二 - 子序列

    A sequence of numbers is called arithmetic if it consists of at least three elements and if the diff ...

  6. [LeetCode] Arithmetic Slices 算数切片

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  7. 52. 不用+、-、×、÷做加法[add two numbers without arithmetic]

    [本文链接] http://www.cnblogs.com/hellogiser/p/add-two-numbers-without-arithmetic.html [题目] 写一个函数,求两个整数的 ...

  8. [转]Tesseract 3.02中文字库训练

    下载chi_sim.traindata字库下载tesseract-ocr-setup-3.02.02.exe 下载地址:http://code.google.com/p/tesseract-ocr/d ...

  9. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock

    本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...

  10. Oracle Recovery 02 - 常规恢复之不完全恢复

    背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 单实例. 二.常规恢复之不完全恢复:部分数据丢失 2.1 重做日志文件 ...

随机推荐

  1. SetProcessWorkingSetSize减少内存占用

    [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")] public stat ...

  2. C语言——数组名、取数组首地址的区别(一)

    目录: 1. 开篇 2. 论数组名array.&array的区别 3. array.&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题, ...

  3. RTT(往返时间)和RPC

    RTT(Round-Trip Time)往返时间在计算机网络中它是一个重要的性能指标.表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经 ...

  4. 【React + flask】跨域服务及访问

    Flask from flask import Flask , request from flask_cors import * import flask import json import pic ...

  5. Fiddler抓包手机代理配置

    参考链接:https://i.wanz.im/2013/04/30/debugging_http_request_with_fiddler/ http://www.hangge.com/blog/ca ...

  6. 安装svn客户端后,代码不能提交

    转载:https://jingyan.baidu.com/article/e8cdb32b3312f637052badde.html

  7. 一个自定义python分布式专用爬虫框架。支持断点爬取和确保消息100%不丢失,哪怕是在爬取进行中随意关停和随意对电脑断电。

    0.此框架只能用于爬虫,由框架来调度url请求,必须按照此方式开发,没有做到类似celery的通用分布式功能,也不方便测试.可以使用另外一个,基于函数式编程的,调度一切函数的分布式框架,做到了兼容任何 ...

  8. Shell常见问题整理

    1. 使用shell进行程序设计的原因是什么? 可以快速.简单的完成编程,非常适合于编写一些执行相对简单的任务的小工具.如果有一个简单的构想,可以通过它检查自己的想法是否可行.还可以使用shell对进 ...

  9. Android Studio 3依赖配置

    新配置 对应的过时配置 描述 implementation compile module编译时可用,module的使用者运行时可用,对于大量使用library的项目,可以显著提高编译时间,因为它可以减 ...

  10. vmare 往 virtualbox迁移

    vmare实在太卡了.抓狂. 于是想迁移到virtualbox观察下. 谷歌了下方案,发现众说纷纭. 有操作超级复杂的,比如:http://stackoverflow.com/questions/69 ...