arithmetic-02
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的更多相关文章
- General Decimal Arithmetic 浮点算法
General Decimal Arithmetic http://speleotrove.com/decimal/ General Decimal Arithmetic [ FAQ | Decima ...
- Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...
- Android游戏开发实践(1)之NDK与JNI开发02
Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...
- iOS系列 基础篇 02 StoryBoard 故事板文件
iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...
- [LeetCode] Arithmetic Slices II - Subsequence 算数切片之二 - 子序列
A sequence of numbers is called arithmetic if it consists of at least three elements and if the diff ...
- [LeetCode] Arithmetic Slices 算数切片
A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...
- 52. 不用+、-、×、÷做加法[add two numbers without arithmetic]
[本文链接] http://www.cnblogs.com/hellogiser/p/add-two-numbers-without-arithmetic.html [题目] 写一个函数,求两个整数的 ...
- [转]Tesseract 3.02中文字库训练
下载chi_sim.traindata字库下载tesseract-ocr-setup-3.02.02.exe 下载地址:http://code.google.com/p/tesseract-ocr/d ...
- Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...
- Oracle Recovery 02 - 常规恢复之不完全恢复
背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 单实例. 二.常规恢复之不完全恢复:部分数据丢失 2.1 重做日志文件 ...
随机推荐
- shell切分字符串到数组
shell切分字符串到数组 问题: 对于’aa,bb,cc,dd,ee’这样的字符串输出采用,分隔开的aa bb cc dd ee aa:bb is ok:/home/work按照":&qu ...
- Ubuntu16.04下搭建Go语言环境
1. 安装GO sudo apt-get install golang-go 2. 设置Go环境变量 打开终端,输入命令: export GOROOT=$HOME/goexport PATH=$GOR ...
- 解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";
解决方案: https://blog.csdn.net/HeatDeath/article/details/79065872 https://blog.csdn.net/hjf161105/artic ...
- [Z] SQL SERVER 的前世今生--各版本功能对比
https://www.cnblogs.com/OwenZeng/p/6813143.html
- 2.基础(Foundations)
chain rule: Bayes' rule: 其他内容就是一些基本的概率论的概念(联合分布,边际分布等)和图的一些概念(节点,边,路径,向上闭包等)
- 第四百一十二节,python接口,抽象方法抽象类
Python接口 在Python中所谓的接口,有两种,一种是通过url访问的api接口 一种是一个对象的接口 构造接口 class Ijiekou: """ 定义一个约束 ...
- windows 安装python pip Could not install packages due to anEnvironmentError: [WinError 5] 拒绝访问
找打 C:\Windows\System32 文件夹下面的cmd.exe点开后运行python -m pip install --upgrade pip 即解决问题了.
- Dedecms判断当前栏目下是否有子栏目
使用dedecms建网站,有时为了某种功能的需要,需要通过代码判断当前栏目下是否有子栏目,如果有,显示一种样式,如果没有,显示另一种样式. dedecms判断当前栏目下是否有子栏目可使用以下的代码进行 ...
- 【Static Program Analysis - Chapter 2】 代码的表征之抽象语法树
抽象语法树:AbstractSyntaxTrees 定义(wiki): 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是 ...
- unity(2017.3) C# 常用API
1. 获取物体的 GetComponent playerRigidbody = GetComponent<Rigidbody> (); GetComponent<Animatro&g ...