遍历集合元素的两种方法

方法1:使用Iterator接口遍历集合元素

Iterator接口也是java集合框架的成员,但它与Collection系列,Map系列的集合不一样,Collection系列,Map系列的集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。

Iterator接口定义了三个方法:

①boolean hasNext():如果被迭代的集合还没有被遍历完(即是否还有下一个元素),有则返回true。

②Object next():返回集合里下一个元素。

③void remove():删除几个里上一次next方法返回的元素,即删除当前元素。

示例如下:

例子1:

package day0210;

import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;

public class TestIter3 {
 public static void main(String args[]) {
  Collection<String> c1 = new ArrayList<String>();
  c1.add("你好~");
  c1.add("我很好~");
  c1.add("他很好~");
  c1.add("她很好~");
  c1.add("大家都很好~");
  /***
   * 以下用Iterator遍历输出集合内的内容
   * 注意点:
   * 1.Iterator本身并不提供盛装对象的能力,要迭代集合,则要创建Iterator对象
   * 2.Iterator必须依赖于Collection对象,有一个Iterator对象,则必然有一个与之关联的Collection对象,
   * 如:Iterator<String> it = c1.iterator();Iterator对象it必须依赖于Collection对象c1
   */
  Iterator<String> it = c1.iterator();
  while (it.hasNext()) {
   String s1=it.next();  
   /**
    * 若遍历的时候,遇到"她很好~"字符串,则删除
    * 注意:一般我们只遍历,不删除。
    */
   if (s1.equals("她很好~")) {
    it.remove();
   }else {
    System.out.println(s1);
   }
   //修改s1字符串的内容不影响c1集合内的元素
   //s1="字符串";
   //System.out.println(s1);
  }
  System.out.println("删除元素后的c1集合:"+c1);
 }
}

以上代码结果如下:

你好~
我很好~
他很好~
大家都很好~
删除元素后的c1集合:[你好~, 我很好~, 他很好~, 大家都很好~]

 另外再举一个例子:

例子2:

package day0210;

 import java.util.List ;
 import java.util.ArrayList ;
 import java.util.Iterator ;
 public class TestIter{
        public static void main(String args[]){
               List<String> all=  new ArrayList<String>() ;      //
               all.add("hello") ;
               all.add("_") ;
               all.add("world") ;
               Iterator<String> iter = all.iterator() ;     // 为Iterator接口实例化
               while(iter.hasNext()){    // 判断是否有内容
                      String str = iter.next() ;
                      if("_".equals(str)){
                       //此处用ArrayList内的remove();方法,将会出现问题。
                             all.remove(str) ;           
                      }else{
                             System.out.println(str) ;
                      }
               }
               System.out.println("删除之后的集合all:" + all) ;
        }
 };

 以上代码结果如下:

hello
删除之后的集合all:[hello, world]

 

这边有几个注意点:

1.调用next()方法后才可以调用remove()方法,而且每次调用next()后最多只能调用一次remove()方法,否则抛出IllegalStateException异常.

2.在实例中Iterator是很少调用删除操作的,因为其本身的功能就是输出集合中的内容。在List,Set,Map接口中,它们本身都有remove();方法,但是如果在使用迭代输出的过程中使用了List,Set,Map接口中的remove()执行删除操作,则代码将出现问题 。所以在使用Iterator输出时,不要使用集合类中的remove()方法,而只能使用Iterator接口中的remove方法

3. Iterator接口的功能是从向前后输出,属于单向的输出, Iterator的主要功能就是完成迭代输出操作的,在使用Iterator的时候最好不要删除数据

 

 方法2:使用foreach遍历集合

使用foreach遍历集合更加便捷

示例如下:

例子1:

package day0210;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class TestForeach1 {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Collection<String> c1 = new ArrayList<String>();
  c1.add("你好~");
  c1.add("我很好~");
  c1.add("他很好~");
  c1.add("她很好~");
  c1.add("大家都很好~");
  for (String s1 : c1) {
   System.out.println(s1);
  }
 }
}

 以上代码结果如下:

你好~
我很好~
他很好~
她很好~
大家都很好~

 另外再举一个例子:

例子2:

package day0210;

 

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

 

public class TestForeach {

 

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Map<String, String> m1 = new HashMap<String, String>();
  m1.put("1", "小丸子");
  m1.put("2", "周红");
  m1.put("3", "周绿");
  m1.put("4", "丸丸");
  m1.put("5", "神");

 

  Set<Map.Entry<String, String>> sm = m1.entrySet();
  for (Entry<String, String> entry : sm) {
   System.out.println(entry.getKey() +"\t"+ entry.getValue());
  }
  System.out.println(sm);

 

 }

 

}

 以上代码结果如下:

3 周绿
2 周红
1 小丸子
5 神
4 丸丸
[3=周绿, 2=周红, 1=小丸子, 5=神, 4=丸丸]

 

posted @ 2012-02-10 19:58  左林右佘  阅读(766)  评论(0编辑  收藏  举报