1,完整代码

//创建两个arraylist对象
Collection al = new ArrayList(); //al1添加元素
al.add("name1");
al.add("name4");
al.add("name3"); Iterator it=al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}

for循环的实现

for(Iterator it=al.iterator();it.hasNext();)
{
System.out.println(it.next());
}

for()的好处:更节约内存

Iterator定义在了循环内部,在循环结束后,it就被释放了,

而在While中it定义在了循环外面,循环结束后对象依然存在,但是却没什么用处,就造成了内存的浪费

2,什么是迭代器?

其实就是集合的取出方式。

【通俗的讲:取一个在就判断一下集合中还有没有元素,有就取出,没有就结束】

3,迭代器(Iterator)的方法?

next();

hasNext();

remove();

4,关键代码

Iterator it=al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}

5,迭代器与集合的关系?

迭代器用于取出集合中的元素,各种集合的底层数据结构并不相同,所以存取方式是不同的,每个集合都具备取出的操作,但是集合的取出比较复杂,不止一个动作,就将取出这个动作封装成了一个对象

定义在内部的原因:

迭代器操作的是集合内部的元素,定义在类的内部更加方便

如果创建在外部,还需要创建集合对象

6,iterator实现源代码【为了防变代码的观看,我把代码反复到了自定义的.java文件中,导致的报错(忽略就好)】

Iterator方法的最初定义是在AbstractList这个类中,他的方法实现很简单就是return了一个Itr对象,

Itr是什么呢?

在上图中可以看到,它是定义在AbstractList这个类里面的内部类

在他的内部定义了我们经常使用的hasNext(),Next(),remove()

然后在Iterator()里面返回了Itr对象

7,下面是Itr的具体实现源码

 private class Itr implements Iterator<E>
{ int cursor = 0;
int lastRet = -1;
int expectedModCount = modCount; public boolean hasNext()
{
return cursor != size();
} public E next()
{
checkForComodification();
try
{
E next = get(cursor);
lastRet = cursor++;
return next;
}
catch (IndexOutOfBoundsException e)
{
checkForComodification();
throw new NoSuchElementException();
}
} public void remove() {
if (lastRet == -1)
throw new IllegalStateException();
checkForComodification(); try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
} final void checkForComodification()
{
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}

iterator取集合元素的更多相关文章

  1. 8.2.2 使用Java8增强的Iterator遍历集合元素

    8.2.2 使用Java 8增强的Iterator遍历集合元素 Iterator接口方法 程序示例 Iterator仅用于遍历集合 Iterator必须依附于Collection对象 修改迭代变量的值 ...

  2. java8 增强的Iterator遍历集合元素

    Iterator接口也是Java集合框架的成员,与Collection和Map两个系列的集合不一样的是Collection和Map系列主要用于充当容器的作用,而Iterator正如其名字一样是主要用于 ...

  3. 当JAVA集合移除自身集合元素时发生的诸多问题

    一段代码目的是想删除集合中包括"a"字符串的集合项: public class TestForeach { public static void main(String[] arg ...

  4. 迭代器:遍历集合元素的操作. iterator()

    package seday11; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; / ...

  5. java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);

    java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...

  6. 集合元素的遍历操作,使用迭代器Iterator接口

    1.内部的方法:hasNext() 和 next() 推荐的方式: //hasNext():判断是否还有下一个元素while(iterator.hasNext()){ //next():①指针下移 ② ...

  7. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  8. 关于C++里set_intersection(取集合交集)、set_union(取集合并集)、set_difference(取集合差集)等函数的使用总结

    文章转载自https://blog.csdn.net/zangker/article/details/22984803 set里面有set_intersection(取集合交集).set_union( ...

  9. 使用filter方法过滤集合元素

    文章转自https://my.oschina.net/nenusoul/blog/658238 Problem 你想要筛选出集合中的一些元素形成一个新的集合,这些元素都是满足你的筛选条件的. Solu ...

随机推荐

  1. 03013_动态页面技术-JSP

    1.jsp的出现 2.jsp脚本和注释 (1)jsp脚本 ①<%java代码%> ----- 内部的java代码翻译到service方法的内部: ②<%=java变量或表达式> ...

  2. ogre3D,cegui配置问题

    今天按照网上的教程配置CEGUI, 一直运行不了,不明白原因,而后又出现了错误 LNK1104: 无法打开文件“OgreGUIRenderer_d.lib”,经过反复检查,排除包含目录问题. 不过可能 ...

  3. mouseClicked、mousePressed、mouseReleased 的区别

    2014年03月16日 21:12:10 xiaobineric 阅读数 9681 标签: 鼠标 事件   关于这3个事件,一直搞不清楚甚至混淆,也已经有一些人说过,但觉得不够明白,最近看了一段教材的 ...

  4. [LOJ#2324]「清华集训 2017」小Y和二叉树

    [LOJ#2324]「清华集训 2017」小Y和二叉树 试题描述 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙 ...

  5. [HAOI2010][bzoj2424] 订货 [费用流]

    题面 传送门 思路 这题其实挺水的......做过餐巾计划问题就能明白,是同一个道理 首先,显然刚刚好满足每一个月的需求,会得到最优解(废话-_-||) 然后我们发现,货物在不同的月之间的转移,可以比 ...

  6. 【线性基】51nod1312 最大异或和&LOJ114 k大异或和

    1312 最大异或和 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题   有一个正整数数组S,S中有N个元素,这些元素分别是S[0] ...

  7. 超简单(super)

    超简单(super) 题目描述 有一个n面的骰子,第i面的数是vi,朝上的概率是pi. 教室的最后一排有一个人,不停地抛这个骰子,直到某一面朝上了两次,就停止抛骰子,但他不知道所有朝上的面的数字的和的 ...

  8. 0-Android使用Ashmem机制进行跨进程共享内存

    Android使用Ashmem机制进行跨进程共享内存 来源: http://blog.csdn.net/luoshengyang/article/details/6651971 导语: 在Androi ...

  9. 【WC2019笔记】IOI2018 / ACM题目选讲

    哇!济南的 rqy 大佬讲课!就是 $luogu$ 上有名的那位! 上面这句话写错了,请大家无视 XylophoneIOI2018 练习赛 T2题意:交互提有一个 $0\sim n-1$ 的排列,保证 ...

  10. 讲的很详细的一篇关于object equals() & hashCode() 的文章

    转: 讲的很详细的一篇关于object equals() & hashCode() 的文章 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java ...