Java Iterator

Iterator 接口提供了一种迭代集合的方法,即顺序访问集合中的每个元素。它支持 hasNext()next() 方法,用于检查是否存在下一个元素以及获取下一个元素。

获取 Iterator

可以使用集合的 iterator() 方法获取 Iterator 实例:

// 导入 ArrayList 类和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator; public class Main {
public static void main(String[] args) {
// 创建一个 ArrayList
ArrayList<String> cars = new ArrayList<>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda"); // 获取 Iterator
Iterator<String> it = cars.iterator();
}
}

遍历集合

可以使用 hasNext()next() 方法遍历集合:

while (it.hasNext()) {
String car = it.next();
System.out.println(car);
}

删除元素

可以使用 Iteratorremove() 方法从集合中删除元素:

while (it.hasNext()) {
String car = it.next();
if (car.equals("Volvo")) {
it.remove();
}
}

注意: 在使用 Iterator 删除元素时,不要使用集合的 for 循环或 for-each 循环,因为这会导致集合大小发生变化,并可能导致 Iterator 出现异常。

Iterator 是 Java 中用于遍历集合的强大工具。它提供了灵活的迭代方式,并支持元素的删除。

Iterator 的优势:

  • 灵活的迭代方式
  • 支持元素的删除
  • 可用于各种集合

Iterator 的劣势:

  • 使用时需要注意集合大小变化
  • 可能比 for 循环或 for-each 循环效率低

建议:

  • 当需要灵活的迭代方式或需要删除元素时,使用 Iterator
  • 当只需要遍历集合并读取元素时,可以使用 for 循环或 for-each 循环。

Java 包装类

Java 包装类为原始数据类型(如 intboolean 等)提供了对象表示形式。这使得将原始数据类型与需要对象的 API 一起使用成为可能。

原始类型与包装类

下表列出了 Java 中的原始类型及其对应的包装类:

原始类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

使用包装类

创建包装对象

可以使用包装类的构造函数创建包装对象,并将原始值作为参数传递:

Integer myInt = new Integer(5);
Double myDouble = new Double(5.99);
Character myChar = new Character('A');

获取值

可以使用包装类的 xxxValue() 方法获取其对应的原始值:

int intValue = myInt.intValue();
double doubleValue = myDouble.doubleValue();
char charValue = myChar.charValue();

其他方法

包装类还提供了其他一些方法,例如:

  • toString(): 将包装对象转换为字符串
  • equals(): 比较两个包装对象是否相等
  • hashCode(): 返回包装对象的哈希码

自动装箱和拆箱

从 Java 5 开始,自动装箱和拆箱允许将原始类型隐式转换为包装类,反之亦然。

例如:

// 自动装箱
int x = 10;
Integer y = x; // 隐式将 int 转换为 Integer // 拆箱
Integer z = 20;
int w = z; // 隐式将 Integer 转换为 int

Java 包装类提供了将原始数据类型用作对象的方法。它们在许多场景下都很有用,例如:

  • 将原始数据类型与需要对象的 API 一起使用
  • 将原始数据类型存储在集合中
  • 使用包装类提供的额外方法

建议:

  • 在需要将原始数据类型用作对象时使用包装类。
  • 了解自动装箱和拆箱机制,以便更好地使用包装类。

注意:

  • 虽然自动装箱和拆箱很方便,但它们可能会导致一些性能问题。
  • 在某些情况下,例如需要精确控制内存使用时,最好避免使用自动装箱和拆箱。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Java 包装类:原始数据类型与迭代器的更多相关文章

  1. Java中原始数据类型存放位置理解

    原始数据类型的变量存放在栈还是堆,应该由上下文去决定. 如下所示的局部方法中,定义了本地变量a,且为原始数据类型,所以存放在栈中. public void func(){ int a = 3; } 再 ...

  2. java&nbsp;原始类与封装类&nbsp;的区别

    int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...

  3. Java中基本数据类型和包装类

    参考:深入剖析Java中的装箱和拆箱; Java中基本数据类型和包装类互转中 缓冲机制的使用; java学习笔记:装箱和拆箱,包装器和缓冲池 Java 各 类型数据在内存中分配情况详解 一 java内 ...

  4. Java parseInt_使用此方法得到的原始数据类型的一个特定的字符串

    Java parseInt解释加方法示例     使用此方法得到的原始数据类型的一个特定的字符串. parseXxx()是一个静态方法,可以有一个参数或两个         java parseInt ...

  5. Java语言基础(五) Java原始数据类型的分类以及数据范围

    Java原始数据类型的分类以及数据范围 1.基本数据类型分为:整型(byte, short, int, long),浮点型(float, double),字符型(char),布尔型(boolean) ...

  6. Java 原始数据类型

    如何记住 Java 中的原始数据类型? 画了一个图方便记忆:

  7. Java 原始数据类型的计算:运算符重载(Operator Overload)和类型转换(Type Conversion)

    原文阅读:<算法(第四版)>第一章 第一节:基础编程模型 有没有在面试的时候被问到:下面这几行代码的执行结果是什么?依据是什么? System.out.println (5/3); Sys ...

  8. Java的基本数据类型大小及其包装类

     Java的基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过定义 ...

  9. Java:基本数据类型包装类

    基本数据类型对象包装类    基本数据类型(关键字)   引用数据类型(类)          byte                          Byte          short   ...

  10. Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)

    1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...

随机推荐

  1. 【Azure Redis】PHPRedis遇见SSL Connection Timeout问题

    问题描述 PHP Redis客户端遇见使用SSL Connection timeout,遇见问题后,切换回去Non-SSL没有出现问题.但是切换回SSL后,还是偶尔遇见Connection timeo ...

  2. 钉钉机器人自动关联 GitHub 发送 approval prs

    摘要:用技术来解决 PM 枯燥的 approval pr 工作,本文将阐述如何自动化获取 GitHub Organization 下各个 repo 待 merge 的 pull requests 并通 ...

  3. centos 8远程分发复制jdk到另一个虚拟机

    在localzly节点操作成功后可以使用远程复制命令将JDK远程复制到slave1节点之中:(此命令在localzly中操作) scp -r /usr/java root@slave1:/usr/ 配 ...

  4. XAF Blazor 中使用 Blazor 组件

    前言 文章的标题是不是感觉有点奇怪,但实际我们在XAFBlazor中使用Blazor组件是很繁琐的,我们需要将Blazor组件封装成属性编辑器(PropertyEditor),再用非持久化对象(Non ...

  5. 阿里二面:如何定位&避免死锁?连着两个面试问到了!

    在面试过程中,死锁是必问的知识点,当然死锁也是我们日常开发中也会遇到的一个问题,同时一些业务场景例如库存扣减,银行转账等都需要去考虑如何避免死锁,一旦线上发生了死锁,那可能年终不保.....下面我们就 ...

  6. vscode复制相对路径时是反斜杠\,改为正斜杠/ [转]

    痛点:复制路径的时候斜杠不对 解决:explorer.copyRelativePathSeparator 设置 在跳出来的设置页面的搜索栏里输入explorer.copyRelativePathSep ...

  7. if (ctx.ifTo(ctx.property, next)) return

    if (ctx.ifTo(ctx.property, next)) return if (ctx.ifGoto(ctx.property, 'functionName')) return 试试 a & ...

  8. Prometheus组件构成及介绍

    Prometheus是一个开源的监控和告警工具包,其常用的组件主要包括以下几个部分: Prometheus Server 功能:Prometheus Server是Prometheus的核心组件,负责 ...

  9. python可视化工具pyecharts初相识

    一 概念 1.pyecahrts基础 某度开源了一个python的可视化工具pyecharts,该工具凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可.而 python 是一门富有表达力的语 ...

  10. 基于AmbiqMicro-AMA3B2KK-KBR的可穿戴智能手环解决方案之心率测量源码解析

    一 前记 梳理该可穿戴产品的手环,产品,是一种成长.也是一个总结. 二 源码解析 1 初始化:这里主要初始化心率的检测间隔时间和心率值的位数. /* initialize heart rate pro ...