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) - 按规则访问非线性结构中的每一项