`

hashMap优化

 
阅读更多

集合初始化时,指定集合初始值大小。

   说明:HashMap 使用 HashMap(int initialCapacity) 初始化,

  正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loader factor)默认为

  0.75,如果暂时无法确定初始值大小,请设置为 16。 反例:HashMap 需要放置 1024 个元素,由于没有  设置容量初始大小,随着元素不断增加,容

  量 7 次被迫扩大,resize 需要重建 hash 表,严重影响性能。

 

/**
	 * ArrayList大容量性能测试
	 */
	private static void performance() {
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		long a1 = System.currentTimeMillis();
		for (int i = 0; i < SIZE; i++) {
			map.put(i, i);
		}
		long a2 = System.currentTimeMillis();
		System.out.println("costs:" + (a2 - a1) + "ms");

		// 预先设置大小
		Map<Integer, Integer> map2 = new HashMap<Integer, Integer>(SIZE);
		for (int i = 0; i < SIZE; i++) {
			map2.put(i, i);
		}
		System.out.println("costs:" + (System.currentTimeMillis() - a2) + "ms");
	}
结果:
costs:692ms
costs:364ms

 


2 遍历:使用增强for循环
      使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。 说明:keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效 率更高。

写道
/**
* map循环测试
*/
private static void forEach() {
Map<Integer, Integer> map = new HashMap<Integer, Integer>(SIZE);
for (int i = 0; i < SIZE; i++) {
map.put(i, i);
}
long time1 = System.currentTimeMillis();
Set<Entry<Integer, Integer>> set = map.entrySet();
for (Entry<Integer, Integer> entry : set) {
int code = entry.getKey().hashCode() + entry.getValue().hashCode();
}
long time2 = System.currentTimeMillis();
System.out.println("costs1:" + (time2 - time1) + "ms");

for (Integer key : map.keySet()) {
int code = key.hashCode() + map.get(key).hashCode();
}
long time3 = System.currentTimeMillis();
System.out.println("costs2:" + (time3 - time2) + "ms");

map.forEach((key, value) -> {
int code = key.hashCode() + value.hashCode();
});
long time4 = System.currentTimeMillis();
System.out.println("costs3:" + (time4 - time3) + "ms");
}
结果:
costs1:48ms
costs2:59ms
costs3:56ms

 




 

分享到:
评论

相关推荐

    HashMap优化及其在列存储数据库查询中的应用_母红芬1

    背景及相关工作哈希技术在大数据环境下应用广泛,能实现海量数据的高效插入和查询。本章主要介绍哈希技术的研究进展,哈希技术在列存储数据库分组和连接查询中的应用,以及

    java8新特性(Stream,lambda等)

    java8新特性(Stream,lambda等)java8新特性(Stream,lambda等)java8新特性(Stream,lambda等)java8新特性(Stream,lambda等)

    HashMap原理分析及性能优化

    文章目录一.HashMap是什么二.HashMap继承类对比分析三.HashMap源码相关单词含义四.HashMap如何确定哈希桶数组索引位置五. HashMap 的 put 方法分析六.HashMap扩容机制七.HashMap线程安全性 一.HashMap是什么 ...

    Go-Golang无锁线程安全的HashMap为最快的读取访问进行了优化

    Golang无锁线程安全的HashMap,为最快的读取访问进行了优化

    07丨深入浅出HashMap的设计与优化.html

    07丨深入浅出HashMap的设计与优化.html

    Java魔法解密:揭秘HashMap底层机制.pptx.pptx

    HashMap在性能优化方面采取多种策略,如扩容机制、负载因子调整等,以保持较低的冲突率和较高的查找效率,提升整体性能。 HashMap的线程安全机制。 HashMap通过synchronized关键字实现线程安全,确保多线程环境下的...

    抖音面经1

    bst的第k个节点?中序遍历。最长无重复子串?如何记忆优化,写一下后面用hashset写了 面试官不满意 问我你不是说要用hashmap优化吗 看着面试官的笑容

    HashMap 源码分析

    然后知道jdk1.8出来以后,HashMap做性能优化修改,底层数据结构变成了数组+链表+红黑树,性能上也有了很大改变(但还是并发问题,可能这也是为了追求性能而不改的,因为在JUC包下已经有了可以支持并发的HashMap-...

    hashmap 集合

    java 集合 优化 菜单,本人所总结,都是项目中所用道德,

    剖析Java中HashMap数据结构的源码及其性能优化

    主要介绍了Java中HashMap数据结构的源码及其性能优化,文中以Java 8后HashMap的性能提升来讨论了HashMap的一些优化点,需要的朋友可以参考下

    面试题之详解HashMap

    1.7以前是直接进行%取模,在1.8优化成了位运算,**取模(%)操作中如果除数是2的幂次则等价于与其除数减一的与(&)操作(即hash%length==hash&(length-1)前提是 length 是2的 n 次方)**并且采用二进制位操作&,相

    Java性能优化手册100技巧 中文PDF最新版

    HashMap 7 种遍历方式的性能评测与优化 If / switch 性能评测 switch 性能优化 JVM 性能优化 MySQL性能优化的 50+ 小技巧 Redis 性能优化的 13 个小技巧 . . . 每篇文章图文并茂,附有源码 + 性能评测结果 + ...

    hashmap:一种Golang无锁,线程安全的HashMap,针对最快的读取访问进行了优化

    哈希图总览Golang无锁无线程安全HashMap,针对最快的读取访问进行了优化。用法为地图中的键设置值: m := &HashMap{}m.Set("amount", 123)从地图中读取键的值: amount, ok := m.Get("amount")使用地图来计数URL请求...

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    HashMap 7 种遍历方式的性能评测与优化 If / switch 性能评测 switch 性能优化 JVM 性能优化 MySQL性能优化的 50+ 小技巧 Redis 性能优化的 13 个小技巧 . . . 每篇文章图文并茂,附有源码 + 性能评测结果 + ...

    HashMap关系数据映射技术软件jadepool-community-3.0

    3、优化了键值生成器方法,并做了高并发性能测试; 4、添加了一组字段值累加累减方法; 5、简化了db.xml配置文件,并兼容1.x版; 升级后的JadePool3.0高并发性做了充分的测试,得到了充分的验证。 JadePool3.0除了...

    小白,和我一起学 HashMap 吗?

    目录1、前言2、简介3、底层数据结构4、存取原理4.1 采用头插法(JDK1.7)4.2 确定key的存放位置(JDK1.7)4.3 确定key的存放位置(JDK1.8)5、...不安全性5.3 扩容过程(JDK1.8)5.3.1 JDK1.8 对重Hash的优化6、重写...

    jdk1.7 HashMap中的致命错误:循环链表

    jdk1.8版本针对jdk1.8进行优化 使用尾插法,消除出现循环链表的情况 链表过长后,转化为红黑树,提高查询效率 具体可以参考我的另一篇博客你真的懂大厂面试题:HashMap吗? 循环链表的产生 多线程同时put时,如果...

    布谷鸟搜索算法求解函数优化问题

    将布谷鸟搜索算法编写为函数的形式,方便重复多次调用。

    jdk1.8中文文学习手册

    在jdk1.8中对hashMap等map集合的数据结构优化。hashMap数据结构的优化 原来的hashMap采用的数据结构是哈希表(数组+链表),hashMap默认大小是16,一个0-15索引的数组,如何往里面存储元素,首先调用元素的hashcode ...

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    开篇词讲怎样才能做好性能调优02讲如何制定性能调优策略04讲慎重使用正则表达式05讲ArrayList还是LinkedList使用不当性能差千倍07讲深入浅出HashMap的设计与优化08讲网络通信优化之IO模型:如何解决高并发下IO瓶颈09...

Global site tag (gtag.js) - Google Analytics