• 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);
        }
    }
  • 相关阅读:
    为Jupyter只安装目录的扩展包
    前端菜鸟的小程序摸索记录
    小计:Shopee批量删除修复~附脚本
    Python3 与 C# 并发编程之~ 协程篇
    记一次硬件故障,并普及点硬件知识
    小计:协同办公衍生出的需求
    监控MySQL|Redis|MongoDB的执行语句(go-sniffer)
    Linux IO实时监控iostat命令详解
    Linux下的磁盘缓存
    使用top命令查看系统状态
  • 原文地址:https://www.cnblogs.com/jiliunyongjin/p/13956567.html
Copyright © 2020-2023  润新知