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);
    }
}
原文地址:https://www.cnblogs.com/jiliunyongjin/p/13956567.html