「java循环技巧」Java中的循环
今天给各位分享java循环技巧的知识,其中也会对Java中的循环进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java怎样使用“for”语句无限循环?
- 2、java中for循环的几种写法
- 3、在Java中怎么样去使用循环?比如说循环三次应该怎么操作?还需要用If来判断么
- 4、java循环语句的两种方法
- 5、Java for循环几种写法整理
- 6、java 比较几种常见循环方式的优劣
java怎样使用“for”语句无限循环?
Java中要使for语句无限循环,只需把循环的判定条件去掉即可。
实现for语句无限循环的方法有很多,最常用的就是直接在条件中写两个分号,如下代码句所示:for(;;),这样就达到了无限循环的目的。
其实开发中,最大忌讳就是使用无限循环,因为一旦控制不好就会出现死循环,如果在循环产生的对象较多,且又没有及时处理,这样就会导致内存泄漏,严重时就会导致系统直接崩溃。故开发慎用无限循环,尤其是一些无法停止的循环。
java中for循环的几种写法
以下为for循环的几种写法:
/***
方法一:最普通的不加思考的写法
* p*优点:较常见,易于理解
* p* 缺点:每次都要计算list.size()*/
for (int i = 0; i list.size(); i++) {
System.out.println(list.get(i));
}
/***
方法二:数组长度提取出来
* p* 优点:不必每次都计算
* p* 缺点:
1、m的作用域不够小,违反了最小作用域原则
2、不能在for循环中操作list的大小,比如除去或新加一个元素*/
int m = list.size();
for (int i = 0; i m; i++) {
System.out.println(list.get(i));
}
/***
方法三:数组长度提取出来
* p* 优点:
1、不必每次都计算
2、所有变量的作用域都遵循了最小范围原则
* p* 缺点:
1、m的作用域不够小,违反了最小作用域原则
2、不能在for循环中操作list的大小,比如除去或新加一个元素*/
for (int i = 0, n = list.size(); i n; i++) {
System.out.println(list.get(i));
}
/***
方法四:采用倒序的写法
* p* 优点:
1、不必每次都计算
2、所有变量的作用域都遵循了最小范围原则
* p* 缺点:
1、结果的顺序会反
2、看起来不习惯,不易读懂
* p* 适用场合:与显示结果顺序无关的地方:比如保存之前数据的校验*/
for (int i = list.size() - 1; i = 0; i--) {
System.out.println(list.get(i));
}
/***
方法五:Iterator遍历
* p* 优点:简洁
* p* 缺点:*/
for (IteratorString it = list.iterator(); it.hasNext();) {
System.out.println(it.next());
}
/*** 方法六:
jdk1.5新写法
* p* 优点:简洁结合泛型使用更简洁*
p* 缺点:jdk1.4向下不兼容*/
for (Object o : list) {
System.out.println(o);
}
在Java中怎么样去使用循环?比如说循环三次应该怎么操作?还需要用If来判断么
LZ是初学JAVA吧,建议多看看书,多动动手。没有人能一下成为高手,慢慢来打好基础。
下面是你的问题:
1.在JAVA中,循环有while、for、do-while等。
2.循环三次:
for(int i=1;i4;i++) {
System.out.printf("%-5s","第"+i+“次for循环!”)
}
3.用不用if判断可以根据需要。比如说我找第一个能被2整除的数,我用了循环,但是我要的只是第一个,那就要在循环中加上if()语句进行判断。
java循环语句的两种方法
for(初始操作;循环条件;每次迭代后的操作){ 循环体;}do{ 循环体}while(循环条件);while(循环条件){ 循环体;}for-each循环for(数据类型:数组名){循环体;}
Java for循环几种写法整理
1:遍历数组的传统方式
/* 建立一个数组 */
int[] integers = {1, 2, 3, 4};
/* 开始遍历 */
for (int j = 0; jintegers.length; j++){
int i = integers[j];
System.out.println(i);
}
2:遍历Collection对象的传统方式
/* 建立一个Collection */
String[] strings = {"A", "B", "C", "D"};
Collection stringList = java.util.Arrays.asList(strings);
/* 开始遍历 */
for (Iterator itr = stringList.iterator(); itr.hasNext();) {
Object str = itr.next();
System.out.println(str);
}
3:遍历数组的简单方式
/* 建立一个数组 */
int[] integers = {1, 2, 3, 4};
/* 开始遍历 */
for (int i : integers) {
System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */
}
4:遍历数组的简单方式的等价代码
/* 建立一个数组 */
int[] integers = {1, 2, 3, 4};
/* 开始遍历 */
for (int 变量名甲 = 0; 变量名甲integers.length; 变量名甲++) {
System.out.println(integers[变量名甲]);/* 依次输出“1”、“2”、“3”、“4” */
}
5:遍历Collection的简单方式
/* 建立一个Collection */
String[] strings = {"A", "B", "C", "D"};
Collection list = java.util.Arrays.asList(strings);
/* 开始遍历 */
for (Object str : list) {
System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */
}
6:遍历Collection的简单方式的等价代码
/* 建立一个Collection */
String[] strings = {"A", "B", "C", "D"};
Collection stringList = java.util.Arrays.asList(strings);
/* 开始遍历 */
for (Iterator 变量名乙 = list.iterator(); 变量名乙.hasNext();) {
Object str = 变量名乙.next();
System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */
}
7:禁止重新赋值
int[] integers = {1, 2, 3, 4};
for (final int i : integers) {
i = i / 2; /* 编译时出错 */
}
8:允许修改状态
Random[] randoms = new Random[]{new Random(1), new Random(2), new Random(3)};
for (final Random r : randoms) {
r.setSeed(4);/* 将所有Random对象设成使用相同的种子 */
System.out.println(r.nextLong());/* 种子相同,第一个结果也相同 */
}
9:使用和要被遍历的数组中的元素相同类型的循环变量
int[] integers = {1, 2, 3, 4};
for (int i : integers) {
System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */
}
10:使用和要被遍历的Collection中的元素相同类型的循环变量
Collection String strings = new ArrayList String();
strings.add("A");
strings.add("B");
strings.add("C");
strings.add("D");
for (String str : integers) {
System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */
}
11:使用要被遍历的对象中的元素的上级类型的循环变量
String[] strings = {"A", "B", "C", "D"};
Collection String list = java.util.Arrays.asList(strings);
for (Object str : list) {
System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */
}
12:使用能和要被遍历的对象中的元素的类型自动转换的类型的循环变量
int[] integers = {1, 2, 3, 4};
for (Integer i : integers) {
System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */
}
java 比较几种常见循环方式的优劣
集合一共有三种遍历方法,以list循环举例:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
ListInteger list = new ArrayList();
for (int i = 0; i 10; i++) {
list.add(i);
}
//for循环遍历
for (int i = 0, size = list.size(); i size; i++) {
System.out.println(list.get(i));
}
//iterator迭代器遍历
IteratorInteger it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//foreach循环
for (Integer i : list) {
System.out.println(i);
}
}
}
数据元素是怎样在内存中存放的?
主要有2种存储方式:
1、顺序存储,Random Access(Direct Access):
这种方式,相邻的数据元素存放于相邻的内存地址中,整块内存地址是连续的。可以根据元素的位置直接计算出内存地址,直接进行读取。读取一个特定位置元素的平均时间复杂度为O(1)。正常来说,只有基于数组实现的集合,才有这种特性。Java中以ArrayList为代表。
2、链式存储,Sequential Access:
这种方式,每一个数据元素,在内存中都不要求处于相邻的位置,每个数据元素包含它下一个元素的内存地址。不可以根据元素的位置直接计算出内存地址,只能按顺序读取元素。读取一个特定位置元素的平均时间复杂度为O(n)。主要以链表为代表。Java中以LinkedList为代表。
每个遍历方法的实现原理是什么?
1、传统的for循环遍历,基于计数器的:
遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。
2、迭代器遍历,Iterator:
每一个具体实现的数据集合,一般都需要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。所以基于顺序存储集合的Iterator可以直接按位置访问数据。而基于链式存储集合的Iterator,正常的实现,都是需要保存当前遍历的位置。然后根据当前位置来向前或者向后移动指针。
3、foreach循环遍历:
根据反编译的字节码可以发现,foreach内部也是采用了Iterator的方式实现,只不过Java编译器帮我们生成了这些代码。
各遍历方式的适用于什么场合?
1、传统的for循环遍历,基于计数器的:
顺序存储:读取性能比较高。适用于遍历顺序存储集合。
链式存储:时间复杂度太大,不适用于遍历链式存储的集合。
2、迭代器遍历,Iterator:
顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了Off-By-One的问题。
链式存储:意义就重大了,平均时间复杂度降为O(n),还是挺诱人的,所以推荐此种遍历方式。
3、foreach循环遍历:
foreach只是让代码更加简洁了,但是他有一些缺点,就是遍历过程中不能操作数据集合(删除等),所以有些场合不使用。而且它本身就是基于Iterator实现的,但是由于类型转换的问题,所以会比直接使用Iterator慢一点,但是还好,时间复杂度都是一样的。所以怎么选择,参考上面两种方式,做一个折中的选择。
关于java循环技巧和Java中的循环的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-22,除非注明,否则均为
原创文章,转载请注明出处。