跳出Java当中的一些循环,跳出双层FOR循环

今天写代码写了个双层的for循环,里面还是用来Iterator,大致意思就是在第二个循环中如果符合条件就给跳出整个双层循环。

刚开始,直接使用break。巴拉巴拉的敲了一堆代码,信心满满的就直接运行。等到结果一看,这不是要我要的。哎··看来不扎实呀!

突然来了兴趣,索性就看看一些资料,总结了几种跳出循环的方式:

1、直接跳出循环:

for (int i = 0; i < 10; i ++) {
	if(i == 4) {
		break;
	}
	System.out.println(i);
}
System.out.println("================");
for(int i = 0; i < 20; i ++) {
	for(int j = 20; j > 0; j --) {
		System.out.println("i = " + i + ", j=" + j);
		if (j == i) {
			break;
		}
	}
}
System.out.println("=================");

这是属于常规性的循环与跳出,一般使用break可以搞定。但是遇到稍微复杂点的双重循环,就不一定如我们所想了。

例如下面的代码:

<span style="white-space:pre">	</span>for (Map map : listMap) {
		for (Iterator it = map.keySet().iterator(); it.hasNext();) {
			String key = (String) it.next();
			Object value = map.get(key);

			System.out.println("第 " + count + "个Map的键值对是:Key=" + key + ",Value=" + value.toString());

			if (key.equals("4")) {
				System.out.println("跳出循环");
				break;

			}
		}
	}

遇到这样的循环,估计简单的break就没用了。那么,使用下面的标记推出就可以实现。

2、利用 标记跳出循环

List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

	loop : for (Map map : listMap) {
		for (Iterator it = map.keySet().iterator(); it.hasNext();) {
			String key = (String) it.next();
			Object value = map.get(key);

			System.out.println("第 " + count + "个Map的键值对是:Key=" + key + ",Value=" + value.toString());

			if (key.equals("4")) {
				System.out.println("跳出循环");
				<strong style="background-color: rgb(255, 255, 255);"><span style="color:#ff6666;">break loop;</span></strong>

			}
		}
	}

这种方式可以很好的实现推出双重循环,但是这是foreach的方法。

假如是for(int i =0; i< 100; i ++)这样的循环,今天在晚上看到另外一种针对双层循环推出的方法。个人觉得很有意思。

3、将循环数做下变动(网友提供的,很有意思)

<span style="white-space:pre">	</span>for (int i = 0; i < listMap.size(); i ++;) {
		Map<String, Object> map = listMap.get(i);
		for (Iterator it = map.keySet().iterator(); it.hasNext();) {
			String key = (String) it.next();
			Object value = map.get(key);

			System.out.println("第 " + count + "个Map的键值对是:Key=" + key + ",Value=" + value.toString());

			if (key.equals("4")) {
				System.out.println("跳出循环");
				<span style="color:#ff6666;"><strong>i = listMap.size();</strong></span>
			}
		}
	}

注意到这种巧妙之处了吧!个人感觉很有新意之处。不过,由于写的比较急,可能其他不当之处没考虑到。

如果有其他方式,欢迎提出!问题之处,欢迎各位指正!

跳出Java当中的一些循环,跳出双层FOR循环,布布扣,bubuko.com

时间: 2024-10-24 12:02:27

跳出Java当中的一些循环,跳出双层FOR循环的相关文章

java中break和continue跳出指定循环(转载)

java中break和continue跳出指定循环 java中break和continue可以跳出指定循环,break和continue之后不加任何循环名则默认跳出其所在的循环,在其后加指定循环名,则可以跳出该指定循环(指定循环一般为循环嵌套的外循环). break跳出指定循环示例代码: loop1:for(int x = 0; x < 4; x++) { loop2:for (int y = 0; y < 5 ; y++ ) { System.out.println("x=&quo

JAVA当中内存管理与垃圾回收!

很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确实很低,一方面,Java语言采用面向对象思想,这也决定了其必然是开发效率高,执行效率低.另一方面,Java语言对程序员做了一个美好的承诺:程序员无需去管理内存,因为JVM有垃圾回收(GC),会去自动进行垃圾回收. 其实不然: 1.垃圾回收并不会按照程序员的要求,随时进行GC. 2.垃圾回收并不会及时

第48节:Java当中的集合框架

Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得学IT行业好,才要求老师转专业的.可以结果没有多余的空位了,数组里的长度都是安排好的,没有空间了. 为了解决新同学的问题,老师们重新创建一个空间(重复创建一个新的数组),为了能够更好的解决问题,老师提供了可以不断扩大空间(Java提供了集合,当数据多了,个数不稳定时,可以用集合). 在Java中,数

使用Map优化双层For循环

笔者在<for循环实战性能优化>中提出了五种提升for循环性能的优化策略,这次我们在其中嵌套循环优化小循环驱动大循环的基础上,借助Map高效的查询性能来优化双层for循环. 如果小循环和大循环的集合元素数量分别为M和N,则双层For循环的循环次数是M*N,随着M和N的增长,对性能的影响越来越大.因此,本文考虑进一步优化.利用下面的代码来模拟测试两种情况的性能: import java.util.ArrayList; import java.util.List; import java.util

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

Java当中的堆与栈详细解析

总结第一句话:Java语言使用内存的时候,栈内存主要保存以下内容:基本数据类型和对象的引用,而堆内存存储对象,栈内存的速度要快于堆内存.总结成一句话就是:引用在栈而对象在堆. Java疯狂讲义的一段对话作为开场白. 一个问题:为什么有栈内存和堆内存之分? 答:当一个方法执行时,每个方法都会简历自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁.因此,所有在方法中创建一个对象时,这个对象将被保存到运行时数据区中,以便利用(因为对象的创建成

Java当中的内存分配以及值传递问题内存解析

首先必须说明作为Java程序员对于内存只要有大致的了解就可以了,如果你对Java当中的某一个知识点在不需要分析内存分配过程的情况下可以掌握,那就大可不必去研究内存.如果你对知识点已经掌握,那么你应该把更多的精力放在对业务逻辑的分析与设计上,这样的话你才可能这一行业走的更远. 好了废话不多说了,下面我带着大家先来简单的看一下Java当中所涉及的内存分配,接着我会以讲解Java当中的值传递问题,分析在代码执行的过程当中内存的状态. 一.Java当中所涉及到的内存分类 Java当中你知道这5种内存就够

Java当中的线程(三)

1. 多线程的数据安全 2. 同步线程的方法 1. 多线程的数据安全 1 class MyThread implements Runnable{ 2 int i = 100; 3 public void run(){ 4 while(true){ 5 System.out.println(Thread.currentThread().getName()+i); 6 i--; 7 Thread.yield(); 8 if(i<0){ 9 break; 10 } 11 } 12 } 13 } 1 c

Java当中的线程(二)

1. 实现线程的第二种方法 2. 控制线程的常用方法 1. 第一种方法是使用继承, 但Java只能使用一次继承, 因此下面这种方法使用的更多 1 class RunnableImpl implements Runnable{ 2 public void run(){ 3 for(int i = 0; i< 100; i++){ 4 System.out.println("Runnable--->" + i); 5 } 6 } 7 } 1 class Test{ 2 publ