您的位置:首页 > 编程语言 > Java开发

jdk1.5新特性之增强for循环

2015-08-07 20:01 573 查看
Jdk1.5新特性之增强for循环
 
1.概念:java SE5引入了一种新的更加简洁的for循环,即增强for循环,也叫Foreach循环(是for循环的一种),用于数组和容器(集合类)。使用foreach循环遍历数组和集合元素时,无需获得数组和集合长度,无需根据索引来访问数组元素和集合元素,因为强大的foreach循环会自动遍历数组和集合的每一个元素。

2.Foreach循环的格式:

  for(type  variableName : array | collection)

{

  //variableName 自动迭代访问每一个元素....

}

对格式解释:

type是数组元素或者集合元素的类型,variableName表示一个形参名,array | collection
是需要被迭代的数组或者集合(该集合是一个实现了Iterable接口的类对象),foreach循环将自动将数组元素、集合元素依次赋给该变量。

3.传统for循环和增强for循环:

 举一个最简单的例子,定义一个整形数组并初始化,然后要打印该数组的元素。

 传统for循环的做法:

 
int [] arr =
newint[]{2,3,5,70,12,34};
      for(int i=0;i<arr.length;i++){
         System.out.print(arr[i]+",");
      }

传统数组用旧式的for循环组装的,组装时必须按索引访问它。

foreach 循环的做法:

int [] arr =
newint[]{2,3,5,70,12,34};
      for(int arrEle :arr){
         System.out.println(arrEle+",");
      }

在foreach循环中就不需要索引了。任何返回一个数组的方法都可以使用foreach循环。例如,String类有一个方法toCharArray(),

它返回一个char数组,也可以使用foreach循环

for(char c :
"I love java , do you ?".toCharArray()){
         System.out.print(c+" ");
      }

那么可以很容易的知道foreach循环比传统的循环更加的简洁,是的遍历数组或集合更加便利。但是,如果需要根据索引来访问数组或集合中的某一个元素,那么foreach循环就做不到了,这时候就需要传统的for循环了。

4.foreach循环的弊端以及如何解决:

 从上面可以看出foreach循环比传统for循环更加便利,但是,foreach循环也是有弊端的,就是foreach循环的目标不能为null,我们来看看下面这段代码:

List<String> list = null;
      for(String l :list){
         System.out.print(l);
      }

运行后跑出异常:

Exception in thread "main" java.lang.NullPointerException
那如何解决弊端呢?那就要先对需要迭代的目标进行null判断。

List<String> list = null;
      if(list !=
null){
       for(String l :list){
         System.out.print(l);
      }

}

我们在获取数组或集合元素时先对该集合或数组进行判断,其实这就是迭代器的功能,接下来会说foreach循环和迭代器。

5.迭代器和for-each循环:

 foreach循环构建在迭代器之上。为了遍历集合,集合必须能够通过发送消息iterator,已返回一个迭代器。foreach循环通过检验集合是否实现了接口
java.lang.Iterable,从而判断某个集合是否可以迭代。

一下代码仅限参考:

publicclass addString<String>implements
Iterable{
 
   private ArrayList<String>
arrlist =
new ArrayList<>();
  
   publicvoid addStr(String s){
     
arrlist.add(s);
   }
   public String getStr(int i){
      returnarrlist.get(i);
   }
   @Override
   public Iterator<String> iterator() {
     
// TODO Auto-generated method stub
      returnarrlist.iterator();
   }
}

然后有一个测试类

publicclass TestIterate {
   publicstaticvoid main(String[] args) {
     
      addString<String> addS=new addString<>();
      addS.addStr("wo");
      addS.addStr("love");
      addS.addStr("java");
 
      for(String s :addS){
         System.out.println(s);
      }  
   }
}

迭代器就可以对addS进行迭代。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: