Map集合遍历的2种方法

Map是一个集合的接口,是key-value相映射的集合接口,集合遍历的话,需要通过Iterator迭代器来进行。

Iterator是什么东西:

java.util包下的一个接口:

对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。

方法名称得到了改进

方法摘要
 boolean hasNext()
          如果仍有元素可以迭代,则返回 true
 E next()
          返回迭代的下一个元素。
 void remove()
          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

 

1、来一个简单的例子吧:

摘抄自别的网站:写的非常清楚

http://www.cnblogs.com/azhqiang/p/4110333.html

Map读取键值对,Java遍历Map的两种实现方法

第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HashMapTest2
{
 public static void main(String[] args)
 {
  HashMap map = new HashMap();
  
  map.put("a","aaaa");
  map.put("b","bbbb");
  map.put("c","cccc");
  map.put("d","dddd");
  
  Set set = map.keySet();
  
  for(Iterator iter = set.iterator(); iter.hasNext();)
  {
   String key = (String)iter.next();
   String value = (String)map.get(key);
   System.out.println(key+"===="+value);
  }
 }
}

第二种方式是使用Map.Entry来获取:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapTest4
{
 public static void main(String[] args)
 {
  HashMap map = new HashMap();
  
  map.put("a","aa");
  map.put("b","bb");
  map.put("c","cc");
  map.put("d","dd");
  
  Set set = map.entrySet();
  
  for(Iterator iter = set.iterator(); iter.hasNext();)
  {
   Map.Entry entry = (Map.Entry)iter.next();
   
   String key = (String)entry.getKey();
   String value = (String)entry.getValue();
   System.out.println(key +" :" + value);
  }
 }
}

获取map的大小:

public static void main(String[] args) {

    Map map = new HashMap();

    map.put("apple", "新鲜的苹果");     //向列表中添加数据

    map.put("computer", "配置优良的计算机");   //向列表中添加数据

    map.put("book", "堆积成山的图书");     //向列表中添加数据

    System.out.println("Map集合大小为:"+map.size());

}


我自己试了,并对其中的每一步进行了详解

基础类:

public class Student {
    //private int num;//身份证号
    private String name;
    private String sex;
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Student(String name, String sex) {
        super();
        this.name = name;
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    

测试集合类:

public class Test3 {
    public static void main(String[] args) {
        //创建学员
        Student stu1=new Student("李明", "男");
        Student stu2=new Student("张丽", "女");
        //创建保存键-值的集合对象
        Map students=new HashMap();
        //把英文名字与学员对象按键-值的方式 存储在HashMap中
        students.put("Jack", stu1);
        students.put("danae", stu2);
        
        /*************第一种方法*********************
        //返回此映射中包含的键的 Set 视图
        Set set= students.keySet();//keyset返回一个set的集合
        //建一个set的迭代器
        Iterator it=set.iterator();//创建键值的迭代器
        //hasNext()如果仍有元素可以迭代,则返回 true。
        while(it.hasNext()){//存在下一个值的时候
            //返回迭代的下一个元素
            String key=(String) it.next(); 
            Student value=(Student)(students.get(key));
            System.out.println(key+"-------"+value.getName()+value.getSex());
            
        }
        ******************************************************/
        Set set=students.entrySet();//返回此映射中包含的映射关系的 Set 视图。
        Iterator it=set.iterator();//建set集合的迭代器
        //遍历集合迭代器
        while(it.hasNext()){
            /***********
             * 映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,
             * 其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。
             * 这些 Map.Entry 对象仅 在迭代期间有效;更确切地讲,
             * 如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过 setValue 在映射项上执行操作之外。
             */
             Map.Entry entry=(Map.Entry) it.next();//有下一个集合数据
             String key=(String) entry.getKey();
             //entry.getkey或getvalue返回的是Object类型的数据,所以要强转,因为我的value值是多个数据,这些数据都是要通过我的student类才能获取到它的属性值
             Student value=(Student) entry.getValue();
             System.out.println(key+"-----------"+value.getName()+value.getSex());
            
        }
        
        
    }
}

 

posted @ 2016-05-31 19:07  sincoolvip  阅读(6161)  评论(0编辑  收藏  举报