您的位置:首页 > 其它

遍历集合元素的两种方法

2012-02-10 19:58 211 查看
方法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);
}
}
}

以上代码结果如下:

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


[b] 另外再举一个例子:[/b]

例子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=丸丸]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: