Java中Map有哪些实现方式?

2026-04-12 03:520阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计308个文字,预计阅读时间需要2分钟。

Java中Map有哪些实现方式?

1. HashMap 允许 key 和 value 为空,非线程安全。 创建时通常使用默认构造方法,其他构造方法也可自定义初始容量和负载因子。 未设置的话,初始容量默认为16,负载因子默认为2。

1.HashMap

允许key和value为空 ,非线程安全。创建的时候通常常用默认的构造方法,其他的构造方法也可以自己去设置初始大小和负载因子,不设置的话初始值大小为16,设置的话应为2的n次幂,最大是2的30次幂,如果设置的不是2的n次幂则会往上去离他最近的2的n次幂。


2.HashTable

不允许key和value为空。初始容量为11,扩容时。以原来的二倍➕1进行扩容,是线程安全的,每个方法都有synchronized修饰,但是性能并不高。

Java中Map有哪些实现方式?


3.concurrentHashMap

实现了concurrentMap接口,concurrentMap又实现了,Map 接口。所以concurrentHashMap也是Map的一种实现。他的大小和扩容机制都和HashMap一样,区别在于put的时候为了线程安全会加锁,但是不是像HashTable那样整体加锁,而是对key对应的node加锁,这样如果两个线程同时put,如果根据key计算的位置不同是完全不影响的,只有两个key经过hash扰动并求模后的值仍然一样时才会等待


作者:KJ.JK

本文共计308个文字,预计阅读时间需要2分钟。

Java中Map有哪些实现方式?

1. HashMap 允许 key 和 value 为空,非线程安全。 创建时通常使用默认构造方法,其他构造方法也可自定义初始容量和负载因子。 未设置的话,初始容量默认为16,负载因子默认为2。

1.HashMap

允许key和value为空 ,非线程安全。创建的时候通常常用默认的构造方法,其他的构造方法也可以自己去设置初始大小和负载因子,不设置的话初始值大小为16,设置的话应为2的n次幂,最大是2的30次幂,如果设置的不是2的n次幂则会往上去离他最近的2的n次幂。


2.HashTable

不允许key和value为空。初始容量为11,扩容时。以原来的二倍➕1进行扩容,是线程安全的,每个方法都有synchronized修饰,但是性能并不高。

Java中Map有哪些实现方式?


3.concurrentHashMap

实现了concurrentMap接口,concurrentMap又实现了,Map 接口。所以concurrentHashMap也是Map的一种实现。他的大小和扩容机制都和HashMap一样,区别在于put的时候为了线程安全会加锁,但是不是像HashTable那样整体加锁,而是对key对应的node加锁,这样如果两个线程同时put,如果根据key计算的位置不同是完全不影响的,只有两个key经过hash扰动并求模后的值仍然一样时才会等待


作者:KJ.JK