java编程语言中,Map接口的子接口及其实现类的重要性不言而喻,在这里将其进行总结。
1. ConcurrentHashMap 是一个线程安全的Hash Map,其由Segment数组结构和HashEntry数组结构组成。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。 具体解释可以参考:http://www.open-open.com/lib/view/open1345475588251.html和http://www.2cto.com/kf/201212/175024.html。
2. ConcurrentSkipListMap 是TreeMap的线程安全版本,其基于一种叫做Skip List(跳表)的数据结构。Skip List是一种可以代替平衡树的数据结构,默认是按照Key值升序的。Skip List让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过"空间来换取时间"的一个算法,在每个节点中增加了向前的指针,在插入、删除、查找时可以忽略一些不可能涉及到的结点,从而提高了效率。其与ConcurrentHashMap 的不同主要有一下几个方面:a. ConcurrentSkipListMap 的key是有序的; b. ConcurrentSkipListMap 支持更高的并发。ConcurrentSkipListMap 的存取时间是log(N),和线程数几乎无关。也就是说在数据量一定的情况下,并发的线程越多,ConcurrentSkipListMap越能体现出他的优势;c. 在并发量相同且不是很高的前提下,ConcurrentHashMap 存取速度更快一些。进一步了解可以参考:http://blog.sina.com.cn/s/blog_630c58cb01015rmn.html。
3. EnumMap 是专门为枚举类型量身定做的Map实现。需要注意的是:a. key必须是enum类型;b. key不能为null; c. EnumMap内部以数组实现,性能更好; d. EnumMap在内部使用枚举类型的ordinal()得到当前实例的声明次序,并使用这个次序维护枚举类型实例对应值在数组的位置。
4. IdentityHashMap 也是非线程安全的Map实现类。利用Chaining Hash 来实现,在判断key是否已经存在是,只是当两个key严格相等时,即key1==key2时,它才认为两个key是相等的 。IdentityHashMap也允许使用null(包括值与键),但不保证键值对之间的顺序。此类比 HashMap(它使用链 而不使用线性探头)能产生更好的性能。实现原理参考:http://oopweb.com/Algorithms/Documents/PLDS210/Volume/hash_tables.html。
5. TreeMap 是以红黑树数据结构来进行实现,因而可以保证当需要快速检索指定节点,它也是非线程安全的,插入的元素都是按一定顺序排序的(其中key不允许为null,value可以是null),可自定义比较的方法。get、put以及remove的时间复杂度为O(log(n))。有关TreeMap实现以及红黑树等问题可以参考:http://blog.csdn.net/jzhf2012/article/details/8540713,http://www.cnblogs.com/liqizhou/archive/2012/09/27/java%E4%B8%ADtreemap%E5%92%8Ctreeset%E5%AE%9E%E7%8E%B0%E7%BA%A2%E9%BB%91%E6%A0%91.html。
6. WeakHashMap 也是非线程安全的,在这种Map中存放了键对象的弱引用,当一个键对象被垃圾回收器回收时,那么相应的值对象的引用会从Map中删除。WeakHashMap能够节省存储空间,可用来缓存那些非必须存在的数据。key\value都允许为null,WeakHashMap是无序的。确保值对象不会直接或间接地强引用其自身的键。具体参考http://www.jb51.net/article/36948.htm。
7. HashMap 实际上是一个数组和链表的结合体,内部存储结构是数组,默认初始化为16长度的Entry[](Entry为内部类,它用来存储key-value对),对于hash冲突采用拉链方法解决。它也不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。需要注意的是:a. 如果使用HashMap做数据缓存要考虑数据量大小,如果量大则占用内存,性能也会受到影响,可以考虑会其它cache替代,oscache、ehcache或分布式缓存memcached等; b. 对象做key时最好注意下是否需要重写hashCode和equals,但要避免代码不合理引起的hash冲突; c. 尽量避免遍历map; d. key为数字时使用考虑使用ArrayList,或与ArrayList配合使用寻求高效。相关参考:http://blog.shilimin.com/219.htm,http://www.iteye.com/topic/539465/。
相关推荐
总结来说,`EasyXmlUtil`是一个实用的Java工具类,它封装了XML与Map之间的相互转换功能,使得开发者能方便快捷地处理这两种数据格式。通过理解和使用此类,可以提高开发效率,简化数据处理的复杂性。在项目中,只需...
Map是Java中最天才的设计,使用起来也很灵活,该类总结了Map通过key和value进行升序和降序排序,Map的两种遍历的公共方法以及上面功能的测试方法
在Java编程语言中,`Map`接口是集合框架的一个重要组成部分,它用于存储键值对。其中,`HashMap`是`Map`接口的一个实现类,提供了基于哈希表的存储方式,具有较快的访问速度。在处理数据时,我们经常需要遍历`Map`中...
"Java集合类总结" Java集合类是Java语言中的一种重要数据结构,用于存储和管理数据。Java集合类可以分为两种:Collection接口和Map接口。Collection接口有两个子接口:List接口和Set接口。List接口是有序的,可以...
在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(key-value pairs)的存储方式。Map不是列表或数组,而是允许我们通过一个键(key)来查找对应的值(value)。本篇文章将深入讲解Map的使用实例...
总结起来,将Map转换为Java实体对象是Java开发中常见的需求,我们可以利用Core Java JDK 1.8的泛型和反射来实现这一功能。通过创建一个通用的工具类,我们可以简化代码并提高代码复用性。在使用过程中,需要注意处理...
总结,使用DOM4J库,我们可以方便地在Java中实现XML与Map之间的互转。这不仅适用于简单的键值对,还支持嵌套结构、属性以及有无根节点的情况。在实际项目中,可以根据具体需求对这些方法进行适当的调整和优化。
总结起来,这个Java MapStruct自定义转换示例展示了以下关键知识点: 1. **MapStruct**:一个用于对象之间属性映射的代码生成库,可以减少手动编写转换代码的工作。 2. **@Mapping注解**:定义对象属性之间的转换...
在Java编程语言中,`Map`接口是一种非常重要的数据结构,它存储键值对,并确保每个键都是唯一的。本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ###...
总结一下,`MapUtils`工具类是Java开发中的一个实用组件,它简化了`Map`数据与实体类之间的转换。通过提供便利的方法,开发者可以快速地将键值对数据转换为具有相应属性的对象,反之亦然。这种数据转换能力在处理...
### Java中Map集合的用法详解 #### 一、引言 在Java编程语言中,`java.util`包内提供了多种强大的数据结构来帮助开发者高效地处理数据。其中,`Map`作为Java中最常用的数据结构之一,被广泛应用于各种场景。`Map`是...
总结,Java中遍历`Map`主要有四种方式,其中通过`Map.entrySet()`进行遍历通常被认为效率较高,尤其在`Map`容量较大的情况下。而在Java 8之后,我们可以利用Lambda表达式简化遍历操作。获取`Map`的长度直接调用`size...
总结来说,Java中的`Map`接口不能直接排序,但可以通过使用`SortedMap`接口的实现如`TreeMap`来实现排序。`TreeMap`可以根据键的自然顺序或提供的比较器对键进行排序。在给定的代码中,通过`mapSortByKey`方法实现了...
总结来说,这两个类实现了基本的JSON与Java对象之间的转换,这对于不希望引入额外依赖的项目非常有用。然而,这种方式可能不如使用成熟的JSON库那样高效或健壮,因为这些库已经处理了很多边缘情况和错误处理。但在...
Java知识体系总结 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它以其“一次编写,到处运行”的特性闻名,适用于开发跨平台的应用程序,包括桌面应用、企业...
- Java的内存分为堆内存(Heap)和栈内存(Stack),对象主要在堆中分配,而局部变量在栈中分配。 - 垃圾回收(Garbage Collection, GC)是Java自动管理内存的重要机制,它负责清理不再使用的对象,避免内存泄漏。...
在Java编程中,`Map`接口是Java集合框架中的一个关键组成部分,它用于存储键值对。本篇文章将详细解释如何遍历`Map`对象的所有数据,并介绍几种常见的遍历方法。我们将重点讨论通过`entrySet()`方法和`keySet()`方法...
总结来说,Java中对Map进行排序通常涉及到HashMap与TreeMap的选择,以及Comparator的使用。对于对象属性Map的排序,需要先对Map进行排序,然后可能还要对对象列表进行排序。通过理解这些概念,开发者能够灵活地控制...
### Java集合类详解总结 在Java编程中,集合框架(Collection Framework)是处理一组对象的强大工具,它提供了标准的数据结构来存储和操作这些对象。Java集合框架主要包括`Collection`、`Set`、`List`、`Queue`、`...