java基础:增强for循环

for/in循环通常叫作 增强的for或者 foreach,它是 Java5.0中一个极为方便的特性。

以下是编译器把该循环转换成普通的for循环之后,语句实际看起来的样子:

编译前:

for(
        声明:
        表达式)
 
        语句
               


编译后:

for (Iterator<
        E> #i = (
        expression).iterator(); #i.hasNext(); ) {
 
        declaration = #i.next();
 
        statement
}


foreach/Iterator

都说foreach是专门为迭代器配置的,为什么?看看

for(typex: exp) loop-body;中的exp必须是数组,或者是实现了Iterable接口的类

一个Iterable对象中必然内嵌了Iterator迭代器。

java.util.Iterator接口:

package java.util;
public interface Iterator<E> {
  public boolean hasNext();
  
  public E next();
  
  public void remove();
}
 


java.lang.Iterable接口

package java.lang;
public interface Iterable<E> {
  public java.util.Iterator<E> iterator();
}


foreach的局限性

1.不能确定您在列表或数组(或者定制对象)中的位置。(因为没有用索引变量)

2.没有办法在遍历期间进行项目删除。(和1的原因是一样的)

自定义遍历

import java.util.Iterator;

class Link_List<T extends Comparable>{// 限制了这个泛型容器必须是放实现了Comparable的元素
	private Node headNode,tailNode;
	public Link_List(){// 构造函数
		headNode=tailNode=null;
	}
	public void add(T x){
		Node p=new Node(x);
		if(isEmpty()){
			headNode=tailNode=p;
		}else{
			tailNode.next=p;
			tailNode=p;
		}
	}
	public boolean isEmpty(){ // 是否为空链表
		if(headNode!=null){
			return false;
		}
		return true;
	}
	public void printList(){
		for(T x: headNode){
			System.out.print(x +"==");
		}
	}
	public Node head(){
		return headNode;
	}
	/**
	 * Node
	 */
	private class Node implements Iterable<T>{
		public T data;	// 数据域
		public Node next;	// 指针域
		
		public Node(T x){// Node构造函数
			this.data=x;
		}
		@Override
		public Iterator<T> iterator() { //构造迭代器
			// TODO Auto-generated method stub
			//return null;
			return new Itr();
		}
		
	}
	/**
	 * Itr
	 */
	private class Itr implements Iterator<T>{
	//构造迭代器就是实现Iterator接口中的所有方法
		private Node cur=headNode;
		@Override
		public boolean hasNext() {
			// TODO Auto-generated method stub
			//return false;
			return (cur!=null);
		}

		@Override
		public T next() {
			// TODO Auto-generated method stub
			//return null;
			Node p=cur;
			cur=cur.next;
			return p.data;
		}

		@Override
		public void remove() {
			// TODO Auto-generated method stub
			
		}
		
	}
}
public class CH_11_5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Link_List<Integer> ls1=new Link_List<>();
		for(int i=1; i<10; i++){
			ls1.add(i);
		}
		ls1.printList();
		double d1=sum(ls1);
		System.out.println("\n 累加和是:"+d1);
	}
	public static double sum(Link_List<? extends Number> ls){
		// 注意理解通配符的应用方法
		double sum=0;
		for(Number n: ls.head()){
			sum+=n.doubleValue();
		}
		return sum;
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值