具体代码
ArrayList list=new ArrayList();
list.add("abc");
list.add("abcd");
list.add("123");
list.add("1234");
while(list.iterator().hasNext())
{
System.out.println(list.iterator().next();
}
这段代码会陷入一个死循环永远输出"abc".......,为什么?
我是这样一来猜测的,iterator()方法会返回一个Iterator对象,但是在ArrayList中并不会保存这个Iterator对象;所以
该iterator()方法执行完以后再来执行该方法ArrayList会产生一个新的Iterator对象;新对象跟前一对象没有任何关系,只是内容一致
有了猜测就需要去验证,去ARRAYLIST的父类AbstractList一看,果然如此
public Iterator<E> iterator() {
return new Itr();
}
对上面的情形我们就需要修改成如下形式
Iterator iterator=list.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next();
}
这样通过一个变量指向ARRAYLIST创建的Iterator对象,然后在循环过程中对该Iterator对象进行操作从而达到我们的设计需要;
相关推荐
点云入门笔记(一):点云数据及获取
点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。
ArrayList中Iterator的研究学习
最近去某公司面试,被问到了一个简单的问题,ArrayList中要删除一些元素应该怎么操作?答曰:"使用Iterator迭代器遍历,判断之后再用迭代器提供的remove()方法将判断为true的元素删掉",问:“为什么要选择这个方法?”答曰:“迭代器采用的是fail-fast机制,foreach循环内部调用了迭代器,删除元素破坏了集合的结构,所以会报错”,追问:“为什么不能用for循环...
华为云Stack 8.X 流量模型分析(一)
当内部需要提供对外服务时(如对外发布Web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。 内部地址要访问公网上的服务时(如Web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
ArrayList中的Iterator详解
每个实现Iterable接口的类必须提供一个iterator方法,返回一个Iterator对象,ArrayList也不例外 public Iterator<E> iterator() { return new Itr(); } 返回的是一个Itr类的对象,接下来我们来看它的部分源码 protected transient int modCount = 0; priv...
基于树莓派与ROS的桌面机器人开发:从硬件组装到AI集成实战
嵌入式系统与机器人操作系统(ROS)是构建智能硬件的核心技术基础。嵌入式系统为设备提供了专用计算与控制能力,而ROS作为机器人开发的中间件框架,通过节点、话题和服务等机制,实现了感知、决策、执行等模块间的松耦合通信与高效集成。这种架构极大地提升了机器人系统的可扩展性与可维护性,其技术价值在于能够将复杂的AI算法,如计算机视觉和语音识别,与实体硬件执行机构无缝结合,从而快速构建出具备环境交互能力的智能体。在桌面机器人、教育套件及服务机器人原型开发等应用场景中,该技术栈尤为适用。本文以开源的Wall-E桌面机器
Hadoop在大数据领域的电商数据分析案例
随着电商行业的迅猛发展,每天都会产生海量的数据,如用户浏览记录、购买行为、商品信息等。如何从这些数据中提取有价值的信息,为电商企业的决策提供支持,成为了电商企业面临的重要问题。Hadoop作为一个开源的分布式计算平台,具有高可靠性、高扩展性和高效性等特点,能够很好地处理大数据。本文的目的就是通过实际案例,详细介绍Hadoop在电商数据分析中的应用,范围涵盖了从数据采集、存储到分析的整个流程。本文首先介绍背景信息,让读者了解Hadoop在电商数据分析中的重要性和应用场景。
【JAVA练习-----集合API】练习ArrayList 集合、Iterator 迭代器、foreach循环、HashSet的使用。
本联系的题目有: 一、有 2 个 ArrayList,元素如下: array1 = "a","b","a","c","d",array2="e","f","a","d","g",将两个集合重复项去除后合并成一个集合,并输出集合中的元素。 二、利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量如 用 户 输 入 字 符 串 :"hello world java", 程 序 输出结果:h(1)e(1)l(3)o(2) (2)w(1)r(1)d(1)j(1)a(2)v(1)。
世界职业院校技能大赛财经赛道项目参考逐字稿五
世界职业院校技能大赛财经赛道项目参考逐字稿五
iterator在java_为什么我们需要在Java中使用ArrayList上的iterator?
参见英文答案 >Do we ever need to use Iterators on ArrayList?6个答案我正在阅读提到的问题的答案“Do we ever need to use Iterators on ArrayList?”。在答案中,用户表示如下:“...
大模型之Spring AI实战系列(二十六):Spring Boot + DeepSeek 实战指南:构建AI聊天应用
在人工智能技术飞速发展的今天,大型语言模型已经成为了推动技术创新的重要力量。DeepSeek作为国内领先的大型语言模型提供商,其推出的DeepSeek系列模型在多个领域都展现出了卓越的性能。本文将详细介绍如何使用Spring Boot框架集成DeepSeek API,构建一个简单的AI聊天应用。我们将实现两个核心功能:普通文本生成和流式文本生成。
torch_npu 用法笔记
torch_npu 用法笔记
深入理解ArrayList
什么是ArrayList? ArrayList的实现原理其实就是数组(动态数组),ArrayList的介绍及简单使用方法 动态数组与一般数组有什么区别? 与Java中的数组相比,ArrayList的容量能动态地增长 ArrayList效率怎么样? ArrayList不是线程安全的,所以效率比较高 ,但是只能用于单线程的环境中,那多线程呢?别急,文末会讲到 ArrayList主要继承哪些类实现了哪些...
Android性能分析——hprof文件分析(一)
hprof 文件是 Java 堆转储文件(Heap Dump File)的标准格式,用于保存 Java 虚拟机(JVM)在某个时间点的内存快照。这种文件对于分析内存泄漏、内存使用情况和对象分配模式非常有用。
深入理解ArrayList iterator remove
深入理解ArrayList iterator remove 我们都知道在list遍历中使用ArrayList.remove 是不安全的。会直接抛出运行时异常java.util.ConcurrentModificationException 具体是为什么呢? 通俗的来讲是因为list列表里面发生了index偏差,当你remove了一个元素,会影响整个list的长度,并且在获取下一元素的时候发生错误。...
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
SIMATIC S7-1200, S7-1500 PID 控制[手册]
SIMATIC S7-1200, S7-1500 PID 控制[手册]
Iterator迭代ArrayList
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratList { public static void main(String[] args) { List list=new ArrayList(); list.add("1"); list.add("*"); list.add("2"); list.add("*"); list.add(
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
深入理解集合的迭代器 Iterator,为什么遍历数组时删除元素不能直接使用remove()方法而需要使用迭代器?
本文介绍了Java中Iterator迭代器的基本概念与使用方法。主要内容包括:1. Iterator接口的核心方法hasNext()和next()的作用;2. 通过ArrayList示例演示迭代器的创建与遍历过程;3. 使用迭代器时的注意事项:不会报索引越界异常、不会自动复位、每次循环只能调用一次next()方法、遍历时不能使用集合方法修改集合元素。文章重点解析了迭代器遍历时修改集合会抛出ConcurrentModificationException异常的底层原理(modCount机制)。
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
Java ArrayList的Iterator源码解析
Iterator是一个非常重要的遍历List的工具,再利用迭代器进行增删改时,往往会产生意想不到的bug,因此我们从源码来理解一下ArrayList的Iterator实现。 rep private class Itr implements Iterator<E> { int cursor; // index of next element to return int lastRet = -1; // index of last element retu
ArrayList源码解析之iterator,listIterator
ArrayList的遍历方式有多种,本文主要对Iterator、ListIterator两种迭代器的源码进行分析。 一、Iterator源码分析 public Iterator<E> iterator() { return new Itr(); } ArrayList的迭代器返回的是一个内部类Itr,接下来看看Itr的内容: private c...
Iterator与ListIterator及ArrayList、LinkedList中对其实现
Iterator与LinkedIterator Iterator与LinkedIterator分别是两个接口,LinkedIterator继承自Iterator接口,所以LinkedIterator会比Iterator多一些方法 Iterator的方法: boolean hasNext(); E next(); void remove(); ListIterator的方法: bool...
有关Iterator的一点看法
本人是初学者,最近研究了一下Iterator,有了一点心得,就写下来,供以后参考。下面是我写的一个简单的类,用来研究Iterator用法的。(顺便也研究了一下ArrayList,这里我只是说一下Iterator) import java.util.ArrayList;import java.util.Iterator;import java.util.List;class Test4{
对于容器中迭代器iterator的理解
容器中Iterator方法的理解。 Iterator是JAVA容器中重要的一个方法,可以实现容器中的遍历。 我们以前实现数组的遍历是这样的 int arr[]={1,2,3,4,5}; for(int i=0; i<arr.length(); i++){ System.out.println(arr[i]+" "); } 那我们想要实现容器中的遍历就需要使用到Itera...
java的 iterator方法_java iterator方法
展开全部iterator方法是JDK提供的迭代32313133353236313431303231363533e4b893e5b19e31333337393536接口进行Java集合的迭代。Iterator iterator = list.iterator();while(iterator.hasNext()){String string = iterator.next();//do someth...
通过ArrayList源码深入理解java中Iterator迭代器的实现原理
注意:本文将着重从源码的角度对Iterator的实现进行讲解,不讨论List与Iterator接口的具体使用方法。不过看懂源码后,使用也就不是什么问题了。 java中各种实现Iterator的类所具体使用的实现方法各不相同,但是都大同小异。因此本文将只通过ArrayList类源码进行分析。所以最好对ArrayList的源码有一定了解,或者至少具备相关的算法知识。 首先贴出ArrayList类中...
java iterator 源码_java的Iterator源码浅析
在java的集合中,List接口继承Collection接口,AbstractList类实现了List接口,在AbstractList中的内部类Itr实现了Iterator接口ArrayList实现List接口并继承AbstractList类,结构图如下:(图片出自网络)Iterator接口源码:public interface Iterator {boolean hasNext();E next...
【Java每日面试题】Iterator迭代器到底是什么?
我们常使用 JDK 提供的迭代接口进行 Java 集合的迭代。 Iterator iterator = list.iterator(); while (iterator.hasNext()) { String string = iterator.next(); //do something } 迭代可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类。Iterator 模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型集合类中抽象出来,从而避免向客户端暴露集合内
为什么ArrayList的遍历中for比Iterator快,而LinkedList中却是Iterator远快于for?
ArrayList 是基于索引(index)的数组,索引在数组中搜索和读取数据的时间复杂度是O(1),ArrayList的get方法只是从数组里面拿一个位置上的元素即可。但是要增加和删除数据却是开销很大的,因为这需要重排数组中的所有数据。 LinkedList 的底层实现则是一个双向循环带头节点的链表,因此LinkedList中插入或删除的时间复杂度仅为O(1),但是获取数据的时间复杂度却是O(n)。 明白了两种List的区别之后,就知道,ArrayList用for循环随机读取的速度是很快的,因为Array
2万+



被折叠的 条评论
为什么被折叠?



