zoukankan      html  css  js  c++  java
  • HashMap

    通过values(),keySet(),entrySet(),Iterate,等方法迭代hashMap

    工作中建议使用entrySet这种迭代方法,效率较高,keySet效率较低。

    package com.example.demo.test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.ecs.xhtml.map;
    
    /**
     * 创建10个map,每个map里放入1万条记录
     * 传递不同的构造方法的参数,比较速度
     * 实验参数,构造方法参数(16,0.75)和(16384,0.75)
     *
     * @date: 2020/11/10
     * @author: Li Bin
     */
    public class TestMap {
    
        public static void main(String[] args) {
            Long sum = 0L;
            for (int i = 0; i < 10; i++) {
                //改变这里的initialCapacity参数
                sum += new TestMap().initMap1(10000, 0.75f);
            }
            System.out.println(sum / 10);
        }
    
        private Long initMap1(int initialCapacity, float loadFactor) {
            String key, value;
            Map<String, String> map1 = new HashMap<String, String>(initialCapacity, loadFactor);
            //纳秒
            Long start = System.nanoTime();
            for (int i = 0; i < 10000; i++) {
                key = String.valueOf(i);
                value = "value";
                map1.put(key, value);
            }
            Long end=System.nanoTime();
            Long time=end-start;
            System.out.println("time="+time);
            return time;
        }
    //扩容的频率越低越好,初使容量根据业务而定,不要一个空构造方法一路走到底。

      private void test(){
    Map<String,String> map=new HashMap<String,String>();
    map.put("x","123");
    map.put("y","456");
    map.replace("x","999");
    //key 和value都匹配都话才会替换成8888
    map.replace("x","123","8888");
    //如果key不存在在的话才put进去
    map.putIfAbsent("x1","333");
    System.out.println(map);

    }
    
    
    }
    package com.example.demo.test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 比较map和linkedHashMap
     *
     * @date: 2020/11/11
     * @author: Li Bin
     */
    public class LinkedHashMap<S, S1> {
    
        public static void main(String[] args) {
            int count=1000000;
    
            Map<String,String> map=new HashMap<String,String>();
            Map<String,String> linkedMap=new java.util.LinkedHashMap<String,String>();
            Long start,end;
            start=System.currentTimeMillis();
            //往map里放入100万条数据
            for (int i = 0; i <count ; i++) {
                map.put(String.valueOf(i),"value");
            }
            end=System.currentTimeMillis();
            System.out.println("map time"+(end-start));
    
            //往linkedMap里放入100万条数据
            start=System.currentTimeMillis();
            for (int i = 0; i <count ; i++) {
                linkedMap.put(String.valueOf(i),"value");
            }
            end=System.currentTimeMillis();
            System.out.println("linkedMap time"+(end-start));
    
            //结论,录入的时候map比较快
    
            //linkedMap迭代测试
            start=System.currentTimeMillis();
            for (String s : linkedMap.values()) {
    
            }
            end=System.currentTimeMillis();
            System.out.println("linkedmap for time:"+(end-start));
            //map迭代测试
            start=System.currentTimeMillis();
            for (String s : map.values()) {
    
            }
            end=System.currentTimeMillis();
            System.out.println("map for time:"+(end-start));
    
            //结论,迭代的时候linkedMap比较快
    
        }
    
    
    }

     linkedHashMap是按照输入的顺序来排序的。

    public static void main(String[] args) {
            Map<String,String> linkedHashMap= new LinkedHashMap<String,String>();
            linkedHashMap.put("x1","1");
            linkedHashMap.put("y1","1");
            linkedHashMap.put("z1","1");
            String y1 = linkedHashMap.get("y1");
            System.out.println(linkedHashMap);
        }

    如果是想以使用过的顺序来排序,则修改构造方法。

    public static void main(String[] args) {
            Map<String,String> linkedHashMap= new LinkedHashMap<String,String>(16,0.75f,true);
            linkedHashMap.put("x1","1");
            linkedHashMap.put("y1","1");
            linkedHashMap.put("z1","1");
    //get一下就代表使用过来 String y1
    = linkedHashMap.get("y1"); System.out.println(linkedHashMap); }

    输出:

    {x1=1, z1=1, y1=1}

    使用过的会排到最后。

    package com.example.demo.test;
    
    import java.util.Comparator;
    import java.util.TreeMap;
    
    /**
     * treeMap 默认是按key升序进行排序,可以自定义比较器Comparator,改变o2.compareTo(o1);就可以实现升序或者降序。
     *
     * @date: 2020/11/11
     * @author: Li Bin
     */
    public class TreeMapTest {
    
        public static void main(String[] args) {
            TreeMap<String,String> treeMap=new TreeMap<String,String>(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    return o2.compareTo(o1);
                }
            });
            treeMap.put("x1","222");
            treeMap.put("av","333");
            treeMap.put("gv","333");
            treeMap.put("cv","333");
            System.out.println(treeMap);
        }
    }
  • 相关阅读:
    video 属性和事件用法大全
    微信小程序 组件通信相关知识整理
    JavaScript实现登录窗口的拖拽
    JS 各种宽高
    CSS3 Animation
    CSS3 Transition
    CSS3 Transform
    vue 回到页面顶部
    element-ui 动态换肤
    Chrome浏览器下自动填充的输入框背景
  • 原文地址:https://www.cnblogs.com/jiliunyongjin/p/13956567.html
Copyright © 2011-2022 走看看