当前位置: 首页 > 科技观察

使用Map时需要注意什么

时间:2023-03-15 14:26:26 科技观察

关于Java中的Map,已经有很多文章介绍了它比较完整的知识点。问题是什么?它是知识的应用。毕竟学了之后,最后还是要投入使用。首先,在使用Map之前,我们先来考虑第一个问题,为什么要使用Map这种数据结构。在我的工作中,笔者认为使用Map的场景通常包括:按照一定的规则对数据进行分组,使用Key作为分组标识;缓存,以Key为索引查找数据。确定要使用Map后,需要考虑使用哪个Map。通常首先想到的也是最常用的就是HashMap。但是需要注意两个地方,是否有线程安全和顺序的要求。线程安全:如果没有并发写入,可以直接使用HashMap。如果有并发写入,则需要使用线程安全的ConcurrentHashMap。Order:如果你想按Key排序,你应该使用TreeMap。如果想按照写的顺序排序,可以使用LinkedHashMap。如果要实现LRU,LinkedHashMap是最好的选择。如果同时有顺序和线程安全的需求,需要注意的是TreeMap和LinkedHashMap都不是线程安全的。对于TreeMap,可以使用Collections.synchronizedSortedMap、synchronized、locks等方法进行同步。同样,LinkedHashMap也可以使用Collections.synchronizedMap,synchronized和lock来保证线程安全。让我们在下面进一步讨论。对于使用HashMap的情况,如果你打算将其作为缓存使用,并且希望缓存自动清理,可以使用WeakHashMap。确定了Map的类型后,最后要考虑的是是否指定初始化大小。在使用HashMap、ConcurrentHashMap和LinkedHashMap时,如果能够提前知道存储元素的个数,就可以按照下面的公式计算出初始化大小,传入构造函数中,避免不必要的扩容。总结:是否使用Map;什么类型的地图是合适的;是否可以指定初始化大小。以上就是笔者目前在使用Map时会考虑的一些事情。如果还有什么需要考虑的,欢迎留言讨论。本文转载自微信公众号“草气子”,可通过以下二维码关注。转载本文请联系草捏公众号。