增强for循环

相对于经典for循环, foreach可以减少代码量,但不是所有情况下foreach都可以代替for循环

当需要修改元素的值或和下标相关的操作需要使用标准for循环

foreach格式

for (数组元素类型 临时变量: 遍历的对象) {}

临时变量代表的是数组的元素,而非下标

foreach对对象进行只读访问, 具有一定的安全性, 因此对数组/集合遍历时优选增强for循环

// 经典for循环
import java.util.Random; int[] arr = new int[5];
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(100) + 1;
}
for (int i = 0; i < arr.length; i++) {
int tem = arr[i];
tmp *= 10;
System.out.print(tmp + " ");
}
System.out.println();

以上代码可简化为:

int[] arr = new int[5];
Random r = new Random;
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(100) + 1;
}
for (int i: arr2) {
System.out.print((i *= 10) + " ");
}

找出数组中的最值并求和

int max, min, sum;
max = 0x80000000;
min = 0x7FFFFFFF;
sum = 0;
for (int i: arr) {
max = max > i? max: i;
min = min < i? min: i;
sum += i;
}
System.out.println("max: " + max + " min: " + min + " sum: " + sum);

删除列表中指定下标的元素, 并缩减数组

// Person.java
public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String say(Person person) {
return person.name + " " + person.age;
}
}
// Student.java
public class Student extends Person{
private String sno; public Student() {} public Student(String sno) {
this.sno = sno;
} public Student(String sno, String name, int age) {
super(name, age);
this.sno = sno;
} public String getSno() {
return sno;
} public void setSno(String sno) {
this.sno = sno;
} public void say() {
String str = super.say(this);
System.out.println(this.sno + " " + str);
}
}
// Demo.java
Student[] studentArr = new Student[5];
studentArr[0] = new Student("001", "小一", 17);
studentArr[1] = new Student("002", "大二", 18);
studentArr[2] = new Student("003", "张三", 19);
studentArr[3] = new Student("004", "李四", 17);
studentArr[4] = new Student("005", "王五", 18);
int index = 2;
int count = studentArr.length - 1;
// 将删除元素的右侧所有元素左移
for (int i = index; i < studentArr.length - 1; i++) {
studentArr[i] = studentArr[i + 1];
}
// 最后一个元素置为null
studentArr[studentArr.length - 1] = null;
// 调用student的say方法
for (Student student: studentArr) {
if (student != null){
student.say();
} else {
System.out.println(student);
}
}
System.out.println("====================="); // 缩减数组
Student[] studentArray = new Student[count];
for (int i = 0; i < studentArray.length; i++) {
studentArray[i] = studentArr[i];
} // 将旧数组指向新数组地址
studentArr = studentArray; for (Student student: studentArr) {
student.say();
}

Java -- 增强for循环(foreach)的更多相关文章

  1. “全栈2019”Java第三十二章:增强for循环Foreach语法

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. Java 增强 for 循环

    Java 增强 for 循环 Java5 引入了一种主要用于数组的增强型 for 循环. Java 增强 for 循环语法格式如下: for(声明语句 : 表达式) { //代码句子 } 声明语句:声 ...

  3. java增强for循环中获取index

    java增强for循环中获取index http://rensanning.iteye.com/blog/2003205

  4. java 增强for循环与泛型

    一 增强for循环 增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的.它的内部 原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作 ...

  5. Java中的增强 for 循环 foreach

    foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理.能够提高性能,并减少代码出错的几率.在 J ...

  6. java 流程执行 循环 foreach循环

    一. if分支 1. 结构  if  else if   else 2.执行原则 if  if  if 结构  会一直去执行()里的判断语句 if else if  else if 结构  只要一条( ...

  7. 增强for循环 -- foreach循环

    1  作用 简化迭代器的书写格式.(注意:foreach循环的底层还是使用了迭代器遍历.) 2  适用范围 如果是实现了Iterable接口的对象或者是数组对象都可以使用foreach循环. 3  格 ...

  8. JAVA增强for循环

    作用:简化数组和集合的遍历 格式:for(元素数据类型  变量 :数组或者集合) 例子: Map map=new HashMap; for(Object obj :map.keySet()){ Obj ...

  9. java 增强for循环对于空集和null的判断

    List<String> list = null; for (String str : list) {//会报空指针异常 System.out.println(str); } List&l ...

  10. Java基础系列(24)- 增强for循环

    增强for循环 这里我们先只是见一面,做个了解,之后数组部分会重点使用 Java5引入了一种主要用于数组或集合的增强型for循环 Java增强for循环语法格式如下 for(声明语句:表达式){ // ...

随机推荐

  1. OPENSUSE网速慢

    无线网卡是Broadcom 4313,刚安装完opensuse,网速只有60Kb左右. 添加packman私有驱动后,网速才正常起来.

  2. @Async异步注解的使用

    @Async 简介 使用spring快速开启异步执行服务的注解 应用场景 同步:同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果. 异步: 异步调用则是只是发送了调用的指令,调用者无需等 ...

  3. JAVA基础Day1-注释/标识符和关键字/数据类型/类型转换/变量、常量、作用域

    目录 一.注释 二.标识符和关键字 标识符命名需要注意: 三.数据类型 基本数据类型: 拓展: 定义时需要注意: 四.类型转换 字节 五.变量.常量.作用域 变量 变量命名规范 变量作用域 常量 一. ...

  4. idea好用的功能

    1. 自定义快捷输入 ----https://blog.csdn.net/qq_35091353/article/details/11828025 可以将一些常用的语法,比如各种lamda表达式.tr ...

  5. mongodb---docker

    docker pull mongo docker run --name mongodb -p 27017:27017 -v /mydata/mongodb/data:/data/db -d mongo ...

  6. arduino问题记录

    1.tx.rx只能写,不能读 2.Arduino中文社区

  7. C语言初级阶段4——数组3——字符数组

    C语言初级阶段4--数组3--字符数组 字符数组的定义:储存字符类型数据的集合 1.注意:如果用字符串给字符数组初始化,那么不需要{},但是要有"". 2.%s :用来输出字符串的 ...

  8. Java中接口相关知识

    1.接口 1.1接口概述 接口就是一种公共的规范标准,只要符合标准,大家都可以通用 Java中的接口更多的体现在对行为的抽象 1.2接口的特点 接口用关键字interface修饰,格式:public ...

  9. 基于predis高并发情况下实现频率控制的函数

    /** * 频率控制函数 * @param string $product 保持唯一 * @param string $key 限制频率的维度 比如uid * @param int $millisec ...

  10. C# 高精度定时器

    https://blog.gkarch.com/2015/09/high-resolution-timer.html https://www.cnblogs.com/samgk/articles/57 ...