需要导入的包

import java.util.Map;import java.util.HashMap;import java.util.Iterator;

定义一个map集合

Map map = new HashMap<>();map.put("id", "1024");map.put("name", "张三");map.put("sex", "男");map.put("age", "30");

方式一:使用for-each循环,通过Map.entrySet遍历key和value(当key和value都需要获取时推荐使用,效率较高)

for (Map.Entry entry : map.entrySet()) {    String key = entry.getKey();    String value = entry.getValue();    System.out.println("方式一:  " + "Key = " + key + "  ----  " + "Value = " + value);}

方式二:使用while循环,通过迭代器进行遍历key和value

Iterator> entries = map.entrySet().iterator();while (entries.hasNext()) {    Map.Entry entry = entries.next();    String key = entry.getKey();    String value = entry.getValue();    System.out.println("方式二:  " + "Key = " + key + "  ----  " + "Value = " + value);}

方式三:使用for循环,通过迭代器进行遍历key,再通过key来获取value。在不需要获取key的情况下,可以直接使用 Iterator i = map.values().iterator() 的方法来获取value

for (Iterator i = map.keySet().iterator(); i.hasNext(); ) {    Object obj = i.next();    if (obj instanceof String) {        String key = (String) obj;        System.out.println("方式三:  " + "Key = " + key + "  ----  " + "Value = " + map.get(key));    }}

方式四:使用for-each循环,通过Map.keySet遍历key,再通过key来获取value。在不需要获取key的情况下,可以直接使用 String value : map.values() 的方法来获取value

for (String key : map.keySet()) {    String value = map.get(key);    System.out.println("方式四:  " + "Key = " + key + "  ----  " + "Value = " + value);}

方式五:使用for循环,通过迭代器进行遍历value,在不需要获取key的情况下,可以通过这种方式直接获取value

for (Iterator i = map.values().iterator(); i.hasNext(); ) {    Object obj = i.next();    if (obj instanceof String) {        String value = (String) obj;        System.out.println("方式五:  " + "Value = " + value);    }}

方式六:使用for-each循环,在不需要获取key的情况下,可以通过这种方式直接获取value(当只需要获取value时推荐使用)

for (String value : map.values()) {    System.out.println("方式六:  " + "Value = " + value);}

运行效果图:

android遍历map的六种方式_第1张图片

注意:for-each循环简化了集合的遍历,同时它也无法拿到集合的下标。

当key和value都需要获取的时候,推荐方式一;当只需要获取value的时候推荐方式六!

为什么分别推荐方式一和方式六呢?其实在这六种遍历方式中,我们要么是使用entrySet方法,要么是使用keySet方法。我们会发现使用entrySet会把键和值都取出来;使用keySet只会单独取出key,这个时候再去取value又是需要花时间的。因此我们可以写一个demo来测试一下它们之间的效率。

import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class MainActivity extends AppCompatActivity {    // 定义一个开始时间    private long startTime = 0;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        new Thread(new Runnable() {            @Override            public void run() {                test();            }        }).start();    }    /**     * 测试代码     */    private void test() {        // 定义一个map        Map map = new HashMap<>();        // 通过循环添加10万数据        for (int i = 0; i < 100000; i++) {            // 添加键值            map.put("key_" + i, "value_" + i);        }        // 重新赋值开始时间        startTime = System.currentTimeMillis();        // 方式一        for (Map.Entry entry : map.entrySet()) {            String key = entry.getKey();            String value = entry.getValue();            System.out.println("方式一:  " + "Key = " + key + "  ----  " + "Value = " + value);        }        Log.e("TAG", "方式一耗时:  " + (System.currentTimeMillis() - startTime) + "毫秒");        // 重新赋值开始时间        startTime = System.currentTimeMillis();        // 方式二        Iterator> entries = map.entrySet().iterator();        while (entries.hasNext()) {            Map.Entry entry = entries.next();            String key = entry.getKey();            String value = entry.getValue();            System.out.println("方式二:  " + "Key = " + key + "  ----  " + "Value = " + value);        }        Log.e("TAG", "方式二耗时:  " + (System.currentTimeMillis() - startTime) + "毫秒");        // 重新赋值开始时间        startTime = System.currentTimeMillis();        // 方式三        for (Iterator i = map.keySet().iterator(); i.hasNext(); ) {            Object obj = i.next();            if (obj instanceof String) {                String key = (String) obj;                String value = map.get(key);                System.out.println("方式三:  " + "Key = " + key + "  ----  " + "Value = " + value);            }        }        Log.e("TAG", "方式三耗时:  " + (System.currentTimeMillis() - startTime) + "毫秒");        // 重新赋值开始时间        startTime = System.currentTimeMillis();        // 方式四        for (String key : map.keySet()) {            String value = map.get(key);            System.out.println("方式四:  " + "Key = " + key + "  ----  " + "Value = " + value);        }        Log.e("TAG", "方式四耗时:  " + (System.currentTimeMillis() - startTime) + "毫秒");        // 重新赋值开始时间        startTime = System.currentTimeMillis();        // 方式五        for (Iterator i = map.values().iterator(); i.hasNext(); ) {            Object obj = i.next();            if (obj instanceof String) {                String value = (String) obj;                System.out.println("方式五:  " + "Value = " + value);            }        }        Log.e("TAG", "方式五耗时:  " + (System.currentTimeMillis() - startTime) + "毫秒");        // 重新赋值开始时间        startTime = System.currentTimeMillis();        // 方式六        for (String value : map.values()) {            System.out.println("方式六:  " + "Value = " + value);        }        Log.e("TAG", "方式六耗时:  " + (System.currentTimeMillis() - startTime) + "毫秒");    }}

运行效果图:

android遍历map的六种方式_第2张图片

从图中可知,方式一和方式六分别耗时最少。因此,当key和value都需要获取时推荐使用第一种方式;当只需要获取value时推荐使用第六种方式。

 

更多相关文章

  1. android中填充界面布局的三种方式
  2. Android 获取联网方式及代理联网
  3. 命令方式启动安卓模拟器(M9)
  4. Android 获取系统时间的三种方式
  5. android 控件onClick事件的4种实现方式
  6. android 通过编程方式 卸载sdcard
  7. Android快捷方式的创建与shortcut是否已创建的判断
  8. android 读取json数据(遍历JSONObject和JSONArray
  9. android中进行https连接的方式(源码)

随机推荐

  1. android中使用多个CheckBox联动,CheckBox
  2. Java将Powermock和Mockito搭配进行单元测
  3. 把NDK集成到Eclipse
  4. 基于Android的Linux内核的电源管理:概述
  5. android 创建文件夹和文件
  6. Android(安卓)启用 SessionTicket
  7. Android(安卓)Studio系列-单元测试入门篇
  8. Android获取当前城市名称
  9. UI开发
  10. Android常见的十个高级控件