精华内容
下载资源
问答
  • 在项目中,我们经常会使用到for循环去匹配对应的数量,例如在成绩表里,我们只保存了学生的id,我们需要根据学生id去匹配对应的学生信息, 这里我就不谈为什么不join关联表去查询(毕竟数量多了,关联查询也是很慢...

    转载:http://www.5180it.com/bbs/admin/1/104.html

     

     

    在项目中,我们经常会使用到for循环去匹配对应的数量,例如在成绩表里,我们只保存了学生的id,我们需要根据学生id去匹配对应的学生信息,


    这里我就不谈为什么不join关联表去查询(毕竟数量多了,关联查询也是很慢的,我本地就6万的学生信息,10多万的成绩,关联查询就100多秒了。。。)

     

    我们看下面的例子

     

    发现虽然加了break跳出第二层循环,但还是要耗时19秒,这就有点难接受了。


    于是,我换了个思路,将学生信息放到map里面,然后循环根据学生id去map里面取,具体结果如下

     


    通过两个结果的对比,我们还是发现第二种比第一种方法效率高很多的,具体什么原因,后续去学习一下,也希望大家指教

     

     

    转载:http://www.5180it.com/bbs/admin/1/104.html

     

     

    展开全文
  • import java.util.*; public class ListUtils { public List<Entity> ListAdd(List<Entity> listA, List<Entity> listB){ if(!listB.isEmpty()){ Map<String,Entity&...
    import java.util.*;
    
    public class ListUtils {
        public List<Entity> ListAdd(List<Entity> listA, List<Entity> listB){
            if(!listB.isEmpty()){
                Map<String,Entity> mapList=new HashMap<>();
                //listA转为map
                for(Entity entityA:listA){
                //key根据实体不同自己确定
                    mapList.put(entityA.getEnXpath(),entityA);
                }
                for(Entity entity:listB){
                //用map的get方法代替循环
                    Entity entityB=mapList.get(entity.getEnXpath());
                    if(entityB!=null){
    					/*你自己的方法*/
                    }else{
                        mapList.put(entity.getEnXpath(),entity);
                    }
                }
                listA=  new ArrayList(mapList.values());
                return listA;
            }else{
                return listA;
            }
        }
    }
    
    展开全文
  • 发现map最快,map返回的是迭代器,如果变成list则花的时间与循环差不多,其次是列表推导,最后是循环来写。


    发现map最快,map返回的是迭代器,如果变成list则花的时间与循环差不多,其次是列表推导,最后是循环来写。

    展开全文
  • Java遍历Map效率对比

    千次阅读 2019-03-25 21:04:11
    Java遍历Map效率对比 Java 中Map容器的遍历有多种方式,但是不同的方式效率会大有不同,以前没有注意这些细节,随意使用遍历方式在本地可能没有什么影响,但是在项目在高频使用需要特别注意,尽量使用高效的方式。 ...

    Java遍历Map效率对比

    Java 中Map容器的遍历有多种方式,但是不同的方式效率会大有不同,以前没有注意这些细节,随意使用遍历方式在本地可能没有什么影响,但是在项目在高频使用需要特别注意,尽量使用高效的方式。

    首先,Map.Entry<K,V>是可以包含了Key和Value的,keySet包含了所有的Key,再使用get方法可以拿到对应的Value;所以包含Key和Value内容的就有两种方式,我们再看访问模式,可以使用迭代器Iterator 访问,也可以使用For循环访问;那么2种包含方式和访问模式组合起来就是4种访问方式

    初始化Map

    导入相应的包

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

    我们选择不同规模Key记录来测试不同方式的差异

        Map<String, String> map = new HashMap<>();
        String key, value;
        int num = 10000; // num值从{1w, 10w, 100w, 1000w}中选择
        for (int i = 1; i <= num; i++) {
          key = "mykey" + i;
          value = "myvalue" + i;
          map.put(key, value);
        }
    

    keySet 与 Iterator

        long startTime1 =System.currentTimeMillis();
        Iterator<String> iter = map.keySet().iterator();
        while (iter.hasNext()){
          key=iter.next();
          value=map.get(key);
        }
        long endTime1 =System.currentTimeMillis();
        System.out.println("Run:"+(endTime1-startTime1)+"ms KeySet && Iterator");
    

    keySet 与 for-loop

        long startTime2 =System.currentTimeMillis();
        for(String key2:map.keySet()){
          value=map.get(key2);
        }
        long endTime2 =System.currentTimeMillis();
        System.out.println("Run:"+(endTime2-startTime2)+"ms KeySet && For-Loop");
    

    Map.Entry<K,V> 与 Iterator

        long startTime3=System.currentTimeMillis();
        Iterator<Map.Entry<String,String>> iter3 =map.entrySet().iterator();
        Map.Entry<String,String> entry3;
        while (iter3.hasNext()){
          entry3 = iter3.next();
          key = entry3.getKey();
          value=entry3.getValue();
        }
        long endTime3 =System.currentTimeMillis();
        System.out.println("Run:" +(endTime3-startTime3)+"ms Map.Entry && Iterator");
    

    Map.Entry<K,V> 与 for-loop

        long startTime4=System.currentTimeMillis();
        for(Map.Entry<String,String> entry4:map.entrySet()){
          key=entry4.getKey();
          value=entry4.getValue();
        }
        long endTime4 =System.currentTimeMillis();
        System.out.println("Run:"+(endTime4-startTime4) +"ms Map.Entry && For-Loop");
    

    效率比较

    以下运行时间单位为毫秒(ms)

    Key数量Entry && IteratorEntry && For-LoopKeySet && IteratorKeySet && For-Loop
    10000(1w)2132
    100000(10w)86108
    1000000(100w)38323936
    10000000(1000w)236251316319

    对比结论

    多次验证,上述结果变化基本不大。使用Map.Entry<K,V>与for循环的组合是最有效率的

    Map常用方法

    Set<K> keySet()
    Collection<V> values()
    V get(Object key)
    boolean containsKey(Object key)
    boolean containsValue(Object value)
    V getOrDefault(Object key, V defaultValue)
    

    Java8 Map的遍历使用了新的方式forEach,这个函数就非常方便了,但是forEach中的值k,v是不可变的,在Java中是final的,这样就无法将k,v赋值给外部的变量了。如果一定要修改外部的值,需要用一个初值来累加/减/乘/除等操作

        Map<String, String> map = new HashMap<>();
        String key, value;
        int num = 10;
        for (int i = 1; i <= num; i++) {
          key = "mykey" + i;
          value = "myvalue" + i;
          map.put(key, value);
        }
    
        map.forEach((k, v) -> {  // 非常方便
          System.out.println(k + ":" + v);
        });
    

    把一个Map全部放到另外一个Map中

    void putAll(Map<? extends K,? extends V> m)
    

    删除一个键值对

    boolean remove(Object key)
    

    替换一个键值对

    boolean	replace(K key, V oldValue, V newValue)
    

    替换Map中所有Entry的value值,这个值由旧的key和value计算得出

    void replaceAll(BiFunction<? super K,? super V,? extends V> function)
    

    参考

    1. Map-Javadoc
    2. Map遍历效率比较
    3. 遍历HashMap的几种方式及其效率比较,HashMap删除元素时如何处理
    4. Java中HashMap的四种遍历方法,及效率比较
    展开全文
  • map循环

    2014-05-13 15:05:16
    在java中有很多种方法来遍历map。接下来我们就回顾下最常用的方法,并且比较下他们的优缺点。 各种map 在java中都实现了map接口,下面的...方法#1:通过通过循环entries 来遍历map  这种方法是最通用和效率比较好的方
  • 比较循环map函数以及列表推导式(list comprehension)的效率 首先是循环,由于循环中可迭代对象中的每一个元素都需要调用一次append并加入新列表中,效率较低。对此进行改良,在函数内部定义一个对新列表append...
  • 遍历数组最常用到的for循环,是最为熟知的一种方法,在ES5中定义了一些新的遍历方法,更加适用于函数式编程,究竟其用法区别在哪,以及效率如何,接着下来亲自做个测试看一下。在Script中写入,  var testData =...
  • python提供的高级函数map将一个函数作用于可迭代对象的每一个元素,底层自动实现并行,运行速度比for循环要快,对于无前后联系的for循环,可以使用map进行优化,以下例子对比了两者的运行速度,map的速度优于for循环...
  • array_map的使用&lt;?php header('content-type:text/html;charset=utf-8'); //生命一个计算脚本运行时间的类 class Timer{ private $startTime = 0; //保存脚本开始执行时的时间(以微秒的形式保存) ...
  • python 中的for 循环和while 循环效率比较低。如果遇到循环时,尽量使用map() reduce() filter()。这三个函数的运行速度和c 差不多。 1 map()函数他接收一个函数和一个序列。在python3 中返回一个map对象。在...
  • java遍历Map效率最高的方式

    万次阅读 2017-11-30 14:57:41
    遍历Map的方式有很多,通常场景下我们需要的是遍历Map中的Key和Value,那么推荐使用的、效率最高的方式是:public static void main(String args...) { HashMap, String> hm = new HashMap, String>(); hm.put(...
  •  运行测试用例发现数据集比较小的情况下,两种简单的搜索方式基本上没有什么区别,当数据量过大(>1000)时,使用hash进行索引,速度会快很多 (hash和排序后进行快速搜索的效率差不多) 转载于:...
  • import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TestCollection {  private List int_list;... private Map int_map;
  • 循环里面取对象或者MAP的值,怎样效率高? 是先在循环外部定义出来然后set到对象属性中, 还是直接获取呢? 比如: ``` String username = ""; String sex = ""; String age = ""; User user = null; ...
  • 遍历map效率最高的方法

    千次阅读 2016-01-07 12:18:32
    Map map=dbUtil.executeQuery(sql, null); Iterator iter=map.entrySet().iterator();...循环输出数据 while(iter.hasNext()){ Map.Entry entry = (Map.Entry) iter.next(); String key=entry.getKey(); Strin
  • 为了满足各种需求,JS除了提供最简单的for循环,在ES6和后续版本中也新增的诸如:map、filter、some、reduce等实用的方法。因为各个方法作用不同,简单的对所有涉及到循环的方法进行单纯执行速度比较,是不公平的,...
  • Map循环4种方式

    千次阅读 2019-10-11 19:44:32
    Map循环4种方式 2018-07-13 16:52:57SecondDream_1017阅读数 1236 遍历方式: Map<String,String>map = new HashMap<String,String>(); map.put("1","java"); map.put("2","c"); ...
  • 可以看到:for循环是最慢的,生成器表达式次之,列表解析和map差不多(map稍慢一点点) Note 1 : 生成器表达式 并非一次性计算出一个列表,而是返回一个生成器,在之后的迭代中才处理对象,所以 省了内存 ...
  • Map 遍历效率比较

    千次阅读 2019-05-03 15:50:54
    Map 中添加 1000000 条数据,key、value 都是 String 类型的字符串。 遍历 Map 中的 key + value 1、通过 keySet 遍历整个 Map 1)采用 Iterator 进行遍历 long start = System.currentTimeMillis(); ...
  • JavaScript中For循环Map循环耗时比较

    千次阅读 2017-09-18 16:40:14
    JavaScript函数遍历时,For和Map的耗时比较。
  • std::map查询效率优化

    千次阅读 2015-07-06 14:41:59
    std::map查询效率优化 0.现状,数据是个xml文件,每个节点对应的结构体有10个成员变量,共有2000多条数据,用的std::map来保存,用map的find函数进行搜索时的效率极   其低下,循环搜索30条数据竟然要20s+,搓...
  • Map遍历效率比较

    千次阅读 2018-04-20 16:14:36
    1、由来 上次博客提到了Map的四种遍历方法,其中有的只是获取了key值或者是value值,但我们应该在什么时刻选择什么样的遍历方式呢,必须通过实践的比较才能看到效率。 也看了很多文章,大家建议使用entrySet,认为...
  • Java Map foreach效率

    万次阅读 2010-09-06 20:13:00
    Java Map foreach效率通过比较源码和字节码,查看在Map 的entrySet在foreach中Java到底做了些什么。源码:public class ForEachTest { public void inForEach(int count) { Map map = new HashMap(); for ...
  • 对于遍历效率, arraylist和iterator都是根据下标获取元素,arraylist使用顺序链表存储数据,因此可以直接获取到元素,而iterator获取元素之前还需要校验等; arraylist使用for循环比使用iterator快 ...
  • 可以发现在小规模循环运算的过程中三者并没有明显的效率区别,但是总体来说,列表推导式的效率最高,其次是map()函数,正常的for循环效率是最低的,这一点尤其在解决大循环量问题时较为明显。
  • 四种遍历map方式效率比较

    千次阅读 2018-11-06 20:54:24
    之前总结过三种遍历list方式的效率问题,今天看到一位博主的遍历map方式效率比较,特转载分享一下,自己也记录一下。 原文地址:https://blog.csdn.net/zajiayouzai/article/details/80922610 作者:zajiayouzai ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,950
精华内容 46,380
热门标签
关键字:

循环map的效率