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. C语言——数组名、取数组首地址的区别(一)

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

  2. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  3. Win2008R2+Apache+PHP+Tomcat配置

    一.VC运行库 对于Apache和PHP,在Windows上运行的话都需要对应VC运行库的支持,即Apache.PHP和VC运行库这三者的版本必须相对应,这就会带来很多问题,比如下了较新的Apache ...

  4. javascript:变量的作用域

    window.onload = function (){ // 1) 在if或else代码块中声明的变量,在代码块的外面也可以取到 if(1==1){ var b = 12; }else{ var b ...

  5. 线程的信号量Semaphore

    线程和进程一样也有信号量,一个资源在同一时刻只有规定数量的线程能使用.

  6. unable to create ...erroractionpreference....

    Docker on windows 10 can't startup after deleting MobyLinuxVM in Hyper-V manually 重新启动hyper-v就可以解决了

  7. CVE-2017-8912 CMS Made Simple命令执行

    CVE-2017-8912 CMS Made Simple命令执行 1)了解命令执行漏洞,并且能够从源码中发现. 2)用eval处理函数,并且过滤不严导致命令执行. 实验步骤 1.1)登录网站 1.2 ...

  8. 学习 ASP.NET Core 2.1:集成测试中使用 WebApplicationFactory

    WebApplicationFactory 是 ASP.NET Core 2.1 新特性 MVC functional test infrastructure 中带来的新东东,它封装了 TestSer ...

  9. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

  10. Spring的bean管理(注解方式)

    注解:代码中的特殊标记,注解可以使用在类.方法.属性上面,使用注解可实现一些基本的功能.注解的写法是@注解名称(属性=属性值). 使用注解创建对象 第一步,创建Web项目,引入Spring的开发包 第 ...