java中循环、遍历、迭代和递归的区别

java中循环、遍历、迭代和递归的区别

1.循环(loop)

  循环是指当条件满足的情况时,重复的去执行一段代码。比如while语句。循环可以对应集合,列表,数组也可以对执行代码进行操作。循环算是一种最基础的概念,凡是重复的执行一段代码,都可以称之为循环,大部分递归,遍历迭代都是循环。

2.遍历(traversal)

  遍历是按照一定规则访问一个非线性结构的每一项,强调非线性结构(树、图)。以树型结构来说,就是访问树型结构的没一个节点,而且每个节点只能访问一次,不能对执行代码进行遍历。所以遍历只能对应集合,列表,数组。

3.迭代(iterate)

  迭代是按顺序访问一个列表中的每一项, 在很多编程语言中表现为foreach语句(注意:foreach循环的底层还是使用了迭代器遍历。):
在这里插入图片描述
  迭代器是一种模式、详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部。
(1)使用方法:iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
图解:
在这里插入图片描述

public class IteratorTest {
	public static void main(String[] args) {
		//创建一个集合。使用多态
		Collection<String> list=new ArrayList<String>();
		//往集合里添加内容
		list.add("小明");
		list.add("小红");
		list.add("小刚");
		// 使用集合中的方法iterator()获取 迭代器的实现类对象,使用Iterator接口接收,多态写法
		Iterator<String> abc=list.iterator(); // new 实现类名称()
		while(abc.hasNext()){ // Iterator接口的方法判断有没有下一个元素
			System.out.println(abc.next());//取出集合的下一个元素
		}
		}
}

  增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点:例如不能在增强循环里动态的删除集合内容、不能获取下标等。

4.递归(recursion)

  在编程中的递归是指,在函数定义内重复调用该函数。 将复杂情况逐步转化成基本情况。
在这里插入图片描述

  例如在数学中著名的斐波那契数列,就是迭代算法。定义了F(0)=1, F(1)=1, 所有其他情况: F(x)=F(x-1)+F(x-2)。(数列从第3项开始,每一项都等于前两项之和。)

int test(i)
{
    if(i==0 ||i==1)
        return 1;    //这里是退出递归的条件, 以保证在有限次递归后能够得到结果
    return test(i-1)+test(i-2);    //转化为更为基本的情况, 重复调用自身进行计算
}
//test 5(test为类名),那么输出应该是1、1、2、3、5。
5.结论

循环(loop) - 最基础的概念, 所有重复的行为
递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况
(编程)迭代(iterate) - 按顺序访问线性结构中的每一项
遍历(traversal) - 按规则访问非线性结构中的每一项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值