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());

        }

    }
}
时间: 2024-10-28 17:05:40

Map集合遍历的2种方法的相关文章

map集合遍历的几种常用方法

import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.Map.Entry; /** * map集合和set集合一样是无序的 * map集合遍历的几种常用方法 * @author Owner * */ public class MapTest5 { public static void main(String[] args) 

HashTable集合遍历的三种方法

hashtable集合遍历可以根据key,value以及key+value 示例代码: Hashtable table = new Hashtable(); Student stu = new Student(); stu.Name = "李四"; stu.Age = 18; Student stu1 = new Student(); stu1.Name = "张三"; stu1.Age = 18; Student stu2 = new Student(); stu

Map集合遍历的四种方式理解和简单使用-----不能for循环遍历

~Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值 1:无非就是通过map.keySet()获取到值,然后根据键获取到值 for(String s:map.keySet()){            System.out.println("key : "+s+" value : "+map.get(s));     } 2:通过Map.Entry(String,String) 获取,然后使用entry.getKey(

Map集合遍历的四种方式

集合框架(一) ----------Map集合遍历的方法

import java.util.*; /** * Map集合遍历的方法 * @author Administrator * */public class Test2 { public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); /*Java 提供两种不同的类型: * 引用类型和原始类型(或内置类型). * Int是java的原始数据类型, * Inte

增强for循环、Map接口遍历、可变参数方法

增强for循环 1.for循环能做得事情,增强for循环大部分都能做(如果要想获得下标的时候就必须使用简单for循环了) 2.增强for有时候能够方便的处理集合遍历的问题,但是集合的标准遍历是使用迭代器 3.在集合框架中体现出了它的强大之处 Map接口遍历 Map接口的遍历: 1.第一种方法 使用map.values()方法,先把value的值都放在一个Collection集合中. 2.第二种方法 使用map.entrySet()方法(推荐使用) 3.第三种方法 使用map.keySet()方法

集合遍历的几种方式

集合遍历有几种方式,下面是我总结的. 1     增强for循环:foreach       语法: for(类型 变量:集合名){  } 这是上名代码的结果 集合: 非单个数据的存储:     Iterator it = 集合对象.iterator();     调用对象自己的iterator() 创建属于这个对象自己的迭代器,然后把迭代器赋值给迭代器的父类     多态:迭代器进行向上转型     就是父类的引用指向子类的对象         向上转型 向下转型       Iterator

二叉树遍历的三种方法(以中序为例)

二叉树遍历的三种方法 递归 简单 时间O(n) 空间O(n) 非递归+栈 中等 时间O(n) 空间O(n) 非递归.不用栈 中等 时间O(n) 空间O(1) 伪代码实现--近C++代码 方法一:递归 1 Inorder-Tree-Walk(x) 2 if(x != NULL) 3 Inorder-Tree-Walk(x->left) 4 print x->key 5 Inorder-Tree-Walk(x->right) 方法二:非递归+栈 1 Inorder-Tree-Walk(x)

PHP中数组遍历常用几种方法

在编码的过程中,对指定的数组进行遍历是再常见不过的事了.在遍历的过程中,很多的语言都是利用for循环进行遍历,方便快捷.但是PHP中,对于数组的下标与有些语言不同.PHP中数组的下标可以为字符串,也可以字符串和数字混合,也就是所谓的关联数组.如果下标是纯数字的话,那就是索引数组了. 1.for() for()进行遍历时,有个局限,如果是关联数组的话,就不能根据下标的递增来遍历了,突然冒出了字符串的话,肯定会报错.所以在PHP中,for()能使用的范围也就是索引数组了. <?php     $ar