java8map遍历方法的简单介绍

博主:adminadmin 2022-11-25 16:26:06 69

今天给各位分享java8map遍历方法的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何高效的遍历Map?你常用的不一定是最快的

如文章标题所言,遍历Map是开发过程中比较常见的行为,实现的方式也有多种方式,本文带领大家一起看看更加高效的遍历 Map 。

首先一起来看看,有哪些遍历 Map 的方式

这种应该算是比较常见的使用方式,也是比较容易理解的

keySet : 获取 map 中所有的 key ,然后依次遍历每个 key 。

这种是我平时开发中用的最多的方式,简单通俗易懂。

但是其性能如何呢?后续待揭秘。

不知道有多少人用过 Java8 中的 parallel模式,本质是一种并行处理方式。

性能如何?稍后揭晓。

不行就找找外援试试?

测试环境如下:Intel i7-4790 3.60 GHz, 16 GB

测试集为小的Map集合(大约100个元素),各个方法耗时如下:

从结果看出,在数据量比较小时, 利用 Java 8中的foreach 暂时领先。

测试集为元素数据量 1000 的 Map 集合,测试结果如下:

从结果集合看,在中等数据量情况下,外援 Eclipse (CS) collections 中的 MutableMap 表现最为优异,勇得第一。

其次为 Java 8 中的 foreach ,位列第二。

测试集为元素数据量 100000 (十万级别) 的 Map 集合,测试结果如下:

利用 iterator 和 Map.Entry 【方法1】稳居第一,领先 第二名差不多7s。

第二名为 Eclipse (CS) collections 中的 MutableMap 位列第二,在大数据量下表现表现比较出色。

指的注意的是之前在小数据量下表现比较出色的 Java 8 中的 foreach ,排名却比较靠后,但是仍然超过了利用 Java8 的 Stream API 。

其中还有另一个现象:利用并行模式计算的 Java8 中的 Stream API parallel ,在大数据量时表现好于 foreach 和 stream api 。

下表为不同数据量情况下的各个方法性能表现

在平时开发中,数据量都不算太大时,剖除外援而言, Java 8 中的 foreach 【方法3】,表现比较优异。而并行运算的 Stream API parallel 【方法8】表现没有想象中好, Stream API 【方法7】表现中规中矩。

主要罗列了多种遍历 Map 的方式,每个实现方式都有各自的特点,有的人喜欢 foreach 的通俗易懂;有的人喜欢 stream 的干净利落。

如果从性能来看,小数据量情况下:优先推荐使用 Java8 Foreach 【方法3】。

大数据量情况下推荐 使用 iterator 和 Map.Entry 【方法1】。

我是大黄,一个只会写 HelloWorld 的程序员,下期见。

Java中便历Map的几种方法

常见的Map遍历有下面四种方法:

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map.Entry;

public class MapDemo {

public static void main(String[] args) {

// 准备好需要遍历的Map

HashMapString, Integer map = new HashMapString, Integer();

map.put("Tom", 85);

map.put("Jack", 97);

test1(map);

test2(map);

test3(map);

test4(map);

}

// 方法一: 迭代器方式

// 特点: 效率高,速度快,但是代码量多

public static void test1(HashMapString, Integer map) {

IteratorEntryString, Integer it = map.entrySet().iterator();

while (it.hasNext()) {

EntryString, Integer e = it.next();

System.out.println("name:" + e.getKey() + "\tscore:" + e.getValue());

}

}

// 方法二: map.entrySet() for循环

// 特点: 效率也较高,速度较快,且写法比方法一简单 

public static void test2(HashMapString, Integer map) {

for (EntryString, Integer e : map.entrySet()) {

System.out.println("name:" + e.getKey() + "\tscore:" + e.getValue());

}

}

// 方法3 map.keySet for循环

// 特点:效率较慢

public static void test3(HashMapString, Integer map) {

for (String key : map.keySet()) {

System.out.println("name:" + key + "\tscore:" + map.get(key));

}

}

// 方法四: forEach 

// 特点 速度较慢,但是代码少,简洁; (需要Java8或以上版本的支持)

public static void test4(HashMapString, Integer map) {

map.forEach((k, v) - System.out.println("name:" + k + "\tscore:" + v));

}

}

四种方法之间的效率比较

(test1≈test2)(test3≈test4)

推荐: 数据量特别大的时候 使用方法1 : 代码长,但是效率高

数据量较少的, 那么使用方法4: 代码简洁而优雅~

java如何遍历map的所有的元素

package net.nie.test; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class HashMapTest { private static MapInteger, String map=new HashMapInteger,String(); /** 1.HashMap 类映射不保证顺序;某些映射可明确保证其顺序: TreeMap 类 * 2.在遍历Map过程中,不能用map.put(key,newVal),map.remove(key)来修改和删除元素, * 会引发 并发修改异常,可以通过迭代器的remove(): * 从迭代器指向的 collection 中移除当前迭代元素 * 来达到删除访问中的元素的目的。 * */ public static void main(String[] args) { map.put(1,"one"); map.put(2,"two"); map.put(3,"three"); map.put(4,"four"); map.put(5,"five"); map.put(6,"six"); map.put(7,"seven"); map.put(8,"eight"); map.put(5,"five"); map.put(9,"nine"); map.put(10,"ten"); IteratorMap.EntryInteger, String it = map.entrySet().iterator(); while(it.hasNext()){ Map.EntryInteger, String entry=it.next(); int key=entry.getKey(); if(key%2==1){ System.out.println("delete this: "+key+" = "+key); //map.put(key, "奇数"); //ConcurrentModificationException //map.remove(key); //ConcurrentModificationException it.remove(); //OK } } //遍历当前的map;这种新的for循环无法修改map内容,因为不通过迭代器。 System.out.println("-------nt最终的map的元素遍历:"); for(Map.EntryInteger, String entry:map.entrySet()){ int k=entry.getKey(); String v=entry.getValue(); System.out.println(k+" = "+v); } } }

java8中如何动态遍历动态多维数组

有两种实现方法:

可以用List数组来实现

可以用map来实现

方法一:用map来实现

比如要创建一个1行、3列的数组,实现方法如下:

public static void main(String[] args) throws CloneNotSupportedException {    MapDouble, ListDouble myMap = create(1, 3);}public static MapDouble, ListDouble create(double row, double column) {    MapDouble, ListDouble doubleMap = new HashMapDouble, ListDouble();    for (double x = 0; x row; x++) {        for (double y = 0; y column; y++) {            doubleMap.put(x, new ArrayListDouble());        }    }    return doubleMap;}

方法二:

可以用List数组来实现

public static void main(String args[]) {

//list 作为动态二维数组

ListListString list = new ArrayList();

ListString a1 = new ArrayListString();

ListString a2 = new ArrayListString();

ListString a3 = new ArrayListString();

list.add(a1);

list.add(a2);

list.add(a3);

a1.add("string1 in a1");

a1.add("string2 in a1");

a2.add("string1 in a2");

a3.add("string1 in a3");

a3.add("string2 in a3");

for (int i = 0; i  list.size(); ++i) {

for (int j = 0; j  list.get(i).size(); ++j)

System.out.println(list.get(i).get(j));

}

}

关于java8map遍历方法和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-25,除非注明,否则均为首码项目网原创文章,转载请注明出处。