android遍历map的六种方式
需要导入的包
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);}
运行效果图:
注意: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) + "毫秒"); }}
运行效果图:
从图中可知,方式一和方式六分别耗时最少。因此,当key和value都需要获取时推荐使用第一种方式;当只需要获取value时推荐使用第六种方式。
更多相关文章
- android中填充界面布局的三种方式
- Android 获取联网方式及代理联网
- 命令方式启动安卓模拟器(M9)
- Android 获取系统时间的三种方式
- android 控件onClick事件的4种实现方式
- android 通过编程方式 卸载sdcard
- Android快捷方式的创建与shortcut是否已创建的判断
- android 读取json数据(遍历JSONObject和JSONArray
- android中进行https连接的方式(源码)