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 重做日志文件 ...
随机推荐
- [转]application.properties详解 --springBoot配置文件
本文转载:http://blog.csdn.net/lpfsuperman/article/details/78287265###; # spring boot application.propert ...
- 一次基于Vue.Js的用户体验优化 (vue drag)
一.写在前面 半年以前,第一次在项目上实践VueJs,由于在那之前,没有Angular,avalon等框架的实践经验,所以在Vue的使用上,没有给自己总结出更多的经验和体验.随着项目进行和优化改版,无 ...
- Android手机用wifi连接adb调试的方法
https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点 ...
- swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
swiper4轮播设置autoplay自动切换后,即默认设置: <script> var mySwiper = new Swiper('.swiper-container', { auto ...
- MySQL 全文检索 ngram插件
InnoDB全文索引:N-gram Parser[转] MySql5.7 建立全文索引 InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的.但对于像中文,日文 ...
- CentOS6.5 添加开机自启动脚本
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务.在解问题之前先来看看Linux的启动流程. 一.Linux的启动流程 主要顺序就是: 1. 加载内核 2. 启动初始化进程 3. 确 ...
- RuntimeException: Type "nmethodBucket*", referenced in VMStructs::localHotSpotVMStructs in the remot
问题:使用jmap命令查看某个进程的堆情况时(jmap -heap 198376),抛异常如下: Attaching to process ID 198376, please wait...Excep ...
- Vue2.0 脚手架代码详解
参考作者:https://www.jianshu.com/p/2b661d01eaf8 只是为了方便个人学习. 来看一下脚手架创建后的项目目录 说明:在*.vue文件,template标签里写htm ...
- ASP.NET页面使用JQuery EasyUI生成Dialog后台取值为空
原因: JQuery EasyUI生成Dialog后原来的文档结构发生了变化,原本在form里的内容被移动form外面,提交到后台后就没有办法取值了. 解决办法: 在生成Dialog后将它append ...
- 用户场景分析i
名字 学生(注重饮食选择,挑剔) 年龄 20 收入 无 知识层面 大学 使用这个网站的典型场景 中午或者晚上饿了但是不知道想吃什么,又不想随便吃,还是比较挑剔..这时,他就需要通过我们的网站来看其他人 ...