黑马程序员技术交流社区
标题:
总结集合中的遍历方式
[打印本页]
作者:
燿陚√揚葳
时间:
2014-7-5 23:20
标题:
总结集合中的遍历方式
本帖最后由 燿陚√揚葳 于 2014-7-8 12:06 编辑
不知道大家开始学习集合的时候有没有被绕晕了,总结一下分享给大家,看看还有没有要补充的了
1.List集合的遍历方式:
<P>public class CollectionDemo {
//集合元素的获得
public static void method_get(){
ArrayList al=new ArrayList();
al.add("java001");
al.add("java002");
al.add("java003");
al.add("java004");
/*第一种方式,这样写比第二种便于观看
Iterator it=al.iterator();//获取迭代器,用于取出集合中的元素
while(it.hasNext()){
sop(it.next());
}
*/
//第二种方式,这样更节省内存空间
for(Iterator it=al.iterator();it.hasNext();){
sop(it.next());
}
}
//第三种高级for循环
for(Object sl:al){
System.out.print(sl);
}
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_get();
}
}
<P> </P>
复制代码
如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator 该集合只能通过List集合的ListIterator方法获取
public class MapTest {
public static void main(String[] args) {
/*
* 如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator
* 该集合只能通过List集合的ListIterator方法获取
*
*/
//演示列表迭代器
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
ListIterator lt=al.listIterator();
while(lt.hasNext()){
Object obj=lt.next();
if(obj.equals("java04"))
// lt.add("java05");
lt.set("java");
}
sop(al);
sop("hasPrevious:"+lt.hasPrevious());//true
sop("hasNext:"+lt.hasNext());//false
}
public static void sop(Object obj){
System.out.println(obj);
}
}
复制代码
枚举的
public class VectorDemo {
public static void main(String[] args) {
Vector al=new Vector();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
Enumeration e=al.elements();
while(e.hasMoreElements()){
sop(e.nextElement());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
复制代码
2.Set集合的遍历
TreeSet和HashSet遍历一样
<P>public static void main(String[] args) {
HashSet hs=new HashSet();
//元素唯一,有重复的元素不会添加进去
sop(hs.add("java01"));//返回true
sop(hs.add("java01"));</P>
<P>hs.add("java02");
hs.add("java03");
hs.add("java04");
hs.add("java03");
hs.add("java04");
//Set 接口取出的方式只有一种,迭代器(高级for循环除外)
Iterator it=hs.iterator();
while(it.hasNext()){
sop(it.next());
}</P>
<P>for(Object s:ts){
System.out.println(s);
}
}</P>
复制代码
3.Map集合的遍历方式
第一种:Set<k>keySet:将Map中所有的键存入到Set集合,因为Set具备迭代器
所以可以用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值
Map集合的取出原理,将Map集合转成Set集合,再通过迭代器取出
public class Coo {
public static void main(String[] args){
Map<String,String> m=new HashMap<String,String>();
m.put("01","java01");
m.put("02", "java02");
m.put("03","java03");
//先获取Map集合的所有键的Set集合,keySet()
Set<String> st=m.keySet();
//有了Set集合就可以获取其迭代器
Iterator<String> it=st.iterator();
while(it.hasNext()){
String key=it.next();
//有了键可以通过Map集合的get方法获取其对应的值
String value=m.get(key);
sop("key:"+key+"***value:"+value);
}
}
public static void sop(Object obj){
System.out.println(obj);
}
复制代码
第二种:Set<Map.Entry<k,v>>entrySet:将Map集合中的映射关系存入到了Set集合中。 而这个关系的数据类型就是:Map.Entry
public static void main(String[] args){
Map<String,String> m=new HashMap<String,String>();
m.put("01","java01");
m.put("02", "java02");
m.put("03","java03");
//将Map集合中的映射关系取出,存入到Set集合中
//Map.Entry是一个关系对象
Set<Map.Entry<String, String>> entrySet=m.entrySet();
Iterator <Map.Entry<String, String>> it=entrySet.iterator();//Set泛型是什么这里就是什么
while(it.hasNext()){
Map.Entry<String, String> me=it.next();
String key=me.getKey();
String value=me.getValue();
sop("key:"+key+"***value:"+value);
}
}
public static void sop(Object obj){
System.out.println(obj);
}
复制代码
第三种:高级for循环
for(数据类型 变量名:被变量的集合(Collection)或者数组){
Map集合遍历时三种方法,都是要将Map先转换成Set集合
public static void main(String[] args) {
HashMap<Integer,String> hm=new HashMap<Integer,String>();
hm.put(1,"a");
hm.put(2,"b");
hm.put(3,"c");
// for(Map.Entry<Integer,String> me:hm.entrySet()){
// System.out.println(me.getKey()+"**********"+me.getValue());
// }
Set<Integer> keySet=hm.keySet();
for(Integer in:keySet){
System.out.println(in+"***"+hm.get(in));
}
}
复制代码
作者:
s526349668
时间:
2014-7-6 00:13
支持一下,很详细
作者:
╰_〃无法释怀的
时间:
2014-7-6 10:30
谢谢楼主,支持一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2