java foreach循环在循环中如何进行比较

Java中跳出循环的方法
众所周知,在中,如果想跳出for循环,一般情况下有两种方法:break和continue。
break是跳出当前for循环,如下面代码所示:
package com.xtfggef.&
public class RecTest {&
&&&& * @param args
&&& public static void main(String[] args) {&
&&&&&&& for(int i=0; i&10; i++){&
&&&&&&&&&&& if(i==5){&
&&&&&&&&&&&&&&&&
&&&&&&&&&&& }&
&&&&&&&&&&& System.out.print(i+& &);&
&&&&&&& }&
输出:0 1 2 3 4
也就是说,break会跳出(终止)当前循环。
continue是跳出当前循环,开使下一循环,如下所示:
package com.xtfggef.&
public class RecTest {&
&&&& * @param args
&&& public static void main(String[] args) {&
&&&&&&& for (int i = 0; i & 10; i++) {&
&&&&&&&&&&& if (i == 5) {&
&&&&&&&&&&&&&&&&
&&&&&&&&&&& }&
&&&&&&&&&&& System.out.print(i+& &);&
&&&&&&& }&
输出:0 1 2 3 4 6 7 8 9
以上两种方法没有办法跳出多层循环,如果需要从多层循环跳出,则需要使用标签,定义一个标签label,然后再需要跳
出的地方,用break label就行了,代码如下:
package com.xtfggef.&
public class RecTest {&
&&&& * @param args
&&& public static void main(String[] args) {&
&&&&&&& loop: for (int i = 0; i & 10; i++) {&
&&&&&&&&&&& for (int j = 0; j & 10; j++) {&
&&&&&&&&&&&&&&& for (int k = 0; k & 10; k++) {&
&&&&&&&&&&&&&&&&&&& for (int h = 0; h & 10; h++) {&
&&&&&&&&&&&&&&&&&&&&&&& if (h == 6) {&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&&&&&&&&&& System.out.print(h);&
&&&&&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&& }&
&&&&&&&&&&& }&
&&&&&&& }&
&&&&&&& System.out.println(&\nI'm here!&);&
I'm here!
意思很显然!Java 实例 - for 和 foreach循环使用
for 语句比较简单,用于循环数据。
for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化; 布尔表达式; 更新) {
//代码语句
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
foreach 语法格式如下:
for(元素类型t 元素变量x : 遍历对象obj){
引用了x的java语句;
以下实例演示了 for 和 foreach循环使用:
Main.java 文件
public class Main {
public static void main(String[] args) {
int[] intary = { 1,2,3,4};
forDisplay(intary);
foreachDisplay(intary);
public static void forDisplay(int[] a){
System.out.println(&使用 for 循环数组&);
for (int i = 0; i & a.length; i++) {
System.out.print(a[i] + & &);
System.out.println();
public static void foreachDisplay(int[] data){
System.out.println(&使用 foreach 循环数组&);
for (int a : data) {
System.out.print(a+ & &);
以上代码运行输出结果为:
使用 for 循环数组
使用 foreach 循环数组
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
记住登录状态
重复输入密码JAVA如何使用一个for循环遍历两个数组找出两个数组比较出现相同次数最多的值【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:719,563贴子:
JAVA如何使用一个for循环遍历两个数组找出两个数组比较出收藏
JAVA如何使用一个for循环遍历两个数组找出两个数组比较出现相同次数最多的值
登录百度帐号&&等java for循环里的第一个表达式执行几遍?大牛解释下i++生效了没
* 存疑?第一个条件怎么解释?
* @methodName: forTestA4
* @description:
* @return void
public static void forTestA4() {
int sum = 0;
int i = 10;
for (i = i++; i &= 10; i++) {
System.out.println(i);
System.out.println(sum);
}1个牛币所有回答列表(13)&LV2for语句执行流程第一个条件,i=i++是给循环变量赋初值,结果就是i=0,这个语句就结束了。然后判断i&=10,进入循环体,打印0,之后执行循环条件i++,再判断i&=10,再执行循环体。&不过 i=i++倒是挺有趣的,网上可以搜到大致是这么解释的【1、java运算符的优先级++符是大于=的。2、The result of the postfix increment expression is not a variable, but a value.后++符表达式的结果是个值而不是一个变量。也就是说后++符先将自己的值存储起来,然后对变量进行++;再进行赋值操作,也就是将先存储起来的值赋给变量i,这样的操作就导致了i值被置为0了】&LV20&LV9只执行一次,i的初始值你就赋值10了,第二个条件你是i&=10,到第二次循环时已经不符合要求了,最后输入的是i和sum的值都是 10&LV4只循环一次,你的i值被初始化为10,然后i&=10的条件成立,然后输出i的值为10,接着执行i++,i变成11,不符合i&=10,所有循环结束,然后就输出sum的值也为10.&LV11int i = 10;&&i = i++;&&i = i++;&&i = i++;&&System.out.println(i);这个结果&打印的时候&还是10&&;所以现在值得疑问的是&i++&到底代表什么呢&&?&LV2无疑执行一遍这个问题涉及到&& i++&& 底层的运算方式; i = i++;不会改变 i 的值。实际上自增的动作是发生在 赋值 之前的。具体发生事件大概是这样1、jvm将 i 的值存储到临时变量 temp = 10;2、i 本身的自增 i = 11;3、赋值:将临时变量temp的值赋给 i最后得到的 i 仍然是 10&LV1运行一下不就知道了&&直接赋值10了,第二遍就不行了&&LV24没有套路的华,第一个表达式满满都是真诚。只执行一次&LV4很厉害的感觉学习啦&LV7只执行一次,第一次i=10,所以,i&=10,输出i是10,sum+=i;输出的值就是10&LV3for循环第一个表达式是初始化循环条件的,可以为空,第一个表达式永远就执行一遍;首先i=i++;根据运算符优先级,先计算单目运算i=(i++)=10&LV3只循环一次,你的i值被初始化为10,然后i&=10的条件成立,然后输出i的值为10,接着执行i++,i变成11,不符合i&=10,所有循环结束,然后就输出sum的值也为10&LV7首先表述一下本题for循环的过程,无疑问肯定三个表达式执行不执行,执行几遍的问题:答:&& & * 1.初始化条件: &++& 的优先级大于 &=&,并且 &i++& 是先试用再自加1,所以这里的i依然为10;条件初始化完成(i=10)初始条件永远不会再次执行&& & * 2.判断 : 10&=10成立,执行循环体 sum=10;&& & * 3.依据2中的判断决定第三个表达式的执行与否: 2条件成立,执行i++(此时i=11)&接下来便是i++底层设计了(引用这位朋友的理解):这个问题涉及到&& i++&& 底层的运算方式; i = i++;不会改变 i 的值。实际上自增的动作是发生在 赋值 之前的。&& &&& &&& &具体发生事件大概是这样&& &&& &&& &1、jvm将 i 的值存储到临时变量 temp = 10;&& &&& &&& &2、i 本身的自增 i = 11;&& &&& &&& &3、赋值:将临时变量temp的值赋给 i所以:最后得到的 i 仍然是 10完完等完等完等完等完等等相关问答等等等等完完等完等等完等最近浏览&LV2&LV1&LV4&LV1&LV1&LV11&LV16&LV7&LV12&LV2扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友查看: 72|回复: 0
Java集合循环性能比较
主题帖子金币
连长, 积分 54, 距离下一级还需 146 积分
连长, 积分 54, 距离下一级还需 146 积分
发表于 前天&21:28
Java开发人员通常措置ArrayList和HashSet等集合。Java 8附带了lambda和streaming API,帮忙我们轻松措置集合。在年夜大都情况下,我们只措置几千个条目的集合,而性能其实不重要。可是,在某些极真个情况下,当我们不克不及不屡次跨越数百万件条目的集合时,性能就会变得很糟糕。
我使用JMH检查每个代码段的运行时间。
forEach vs. C语言气概循环 vs. Stream API
迭代是一个基本特性。所有编程语言都有简单的语法,允许程序员在集合中进行迭代。而streaming API可以以很是简单的体例对集合进行迭代。
public List&Integer& streamSingleThread(BenchMarkState state){
List&Integer& result = new ArrayList&&(state.testData.size());
state.testData.stream().forEach(item -& {
result.add(item);
public List&Integer& streamMultiThread(BenchMarkState state){
List&Integer& result = new ArrayList&&(state.testData.size());
state.testData.stream().parallel().forEach(item -& {
result.add(item);
forEach 迭代代码很简单:
public List&Integer& forEach(BenchMarkState state){
List&Integer& result = new ArrayList&&(state.testData.size());
for(Integer item : state.testData){
result.add(item);
C语言气概代码比较冗长,但仍然很是紧凑:
public List&Integer& forCStyle(BenchMarkState state){
int size = state.testData.size();
List&Integer& result = new ArrayList&&(size);
for(int j = 0; j & j ++){
result.add(state.testData.get(j));
然后,查看性能比较:
Benchmark Mode Cnt Score Error Units
TestLoopPerformance.forCStyle avgt 200 18.068 ± 0.074 ms/op
TestLoopPerformance.forEach avgt 200 30.566 ± 0.165 ms/op
TestLoopPerformance.streamMultiThread avgt 200 79.433 ± 0.747 ms/op
TestLoopPerformance.streamSingleThread avgt 200 37.779 ± 0.485 ms/op
使用C气概的循环代码,JVM只增加一个整数,然后直接从内存中读取值。这使它运行效率很是快。
可是forEach是很是不合的,根据从StackOverFlow和Oracle文档上获得的谜底,JVM必须将forEach转换为迭代器,并对每个条目挪用hasNext()。
这就是为什么forEach比C语言气概代码慢。
哪种是高性能的集合遍历体例?
我们界说测试数据:
@State(Scope.Benchmark)
public static class BenchMarkState {
@Setup(Level.Trial)
public void doSetup() {
for(int i = 0; i & 500000; i++){
testData.add(Integer.valueOf(i));
@TearDown(Level.Trial)
public void doTearDown() {
testData = new HashSet&&(500000);
public Set&Integer& testData = new HashSet&&(500000);
Java集还支持流API和forEach循环。根据前面的测试,如果我们将Set转换为ArrayList,然后遍历ArrayList,性能可能会提高吗?
public List&Integer& forCStyle(BenchMarkState state){
int size = state.testData.size();
List&Integer& result = new ArrayList&&(size);
Integer[] temp = (Integer[]) state.testData.toArray(new Integer[size]);
for(int j = 0; j & j ++){
result.add(temp[j]);
将迭代器与C气概的循环的组合在一起如何呢?
public List&Integer& forCStyleWithIteration(BenchMarkState state){
int size = state.testData.size();
List&Integer& result = new ArrayList&&(size);
Iterator&Integer& iteration = state.testData.iterator();
for(int j = 0; j & j ++){
result.add(iteration.next());
或者,只是简单的循环?
public List&Integer& forEach(BenchMarkState state){
List&Integer& result = new ArrayList&&(state.testData.size());
for(Integer item : state.testData) {
result.add(item);
这是一个很好的想法,可是它不起作用,因为初始化新的ArrayList也会消耗资源。
Benchmark Mode Cnt Score Error Units
TestLoopPerformance.forCStyle avgt 200 6.013 ± 0.108 ms/op
TestLoopPerformance.forCStyleWithIteration avgt 200 4.281 ± 0.049 ms/op
TestLoopPerformance.forEach avgt 200 4.498 ± 0.026 ms/op
HashMap (HashMap使用HashMap)不是为迭代所有项而设计的。遍历HashMap的最快体例是将Iterator和C样式的循环结合起来,因为JVM没必要挪用hasNext()。
Foreach和Stream API可以便利地措置集合。您可以更快地编写代码。可是,当您的系统对稳定和性能要求很高时,您应该考虑编写合适的循环代码。
更多内容回复查看:游客,如果您要查看本帖隐藏内容请
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码
Powered by

我要回帖

更多关于 java零基础入门书籍 的文章

 

随机推荐