- 浏览: 147185 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (152)
- 异常以及异常处理框架探析 (1)
- java语法 (18)
- 职场生活 (8)
- js前端 (9)
- Tomcat (8)
- java架构 (23)
- .Net (2)
- Linux (4)
- Spring (6)
- Nginx (7)
- 设计模式 (3)
- JVM (4)
- 数据库 (2)
- 智力题 (1)
- SVN (1)
- Maven (3)
- MYSQL (5)
- java线程池2-任务队列的规则 (1)
- 英语学习 (1)
- 面试题 (7)
- MyBatis (2)
- 并发 (3)
- Memcache (2)
- XML (1)
- Hadoop (1)
- Web容器 (1)
- Struts2 (2)
- 产品运营 (1)
- 安全 (1)
- Mongodb (1)
- Shell (0)
- 恋爱 (1)
- 简单对象访问协议 (1)
- mybatis优化(转) (1)
- 算法 (1)
- Redis (2)
- Spring MVC数据绑定大全 (1)
- 错误搜集 (1)
- IDEA (1)
最新评论
-
sunshine_love:
故事里的事说是就是不是也是 故事里的事说不是就不是是也不是 故 ...
在这个变化的年代,IT人的方向在哪里?看两个故事
Java中HashMap和TreeMap的区别深入理解
博客分类: Java
javathread数据结构
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对。
HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
HashMap 非线程安全 TreeMap 非线程安全
线程安全
在Java里,线程安全一般体现在两个方面:
1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable
(后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。
2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。
1.AbstractMap抽象类和SortedMap接口
AbstractMap抽象类:(HashMap继承AbstractMap)覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。映射的哈希码是映射元素哈希码的总和,其中每个元素是Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的哈希码。
SortedMap接口:(TreeMap继承自SortedMap)它用来保持键的有序顺序。SortedMap接口为映像的视图(子集),包括两个端点提供了访问方法。除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet一样。添加到SortedMap实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeMap类是它的唯一一份实现。
2.两种常规Map实现
HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。
(1)HashMap(): 构建一个空的哈希映像
(2)HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射
(3)HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像
(4)HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像
TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。
(1)TreeMap():构建一个空的映像树
(2)TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素
(3)TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序
(4)TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序
3.两种常规Map性能
HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
4.总结
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
博客分类: Java
javathread数据结构
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对。
HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
HashMap 非线程安全 TreeMap 非线程安全
线程安全
在Java里,线程安全一般体现在两个方面:
1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable
(后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。
2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。
1.AbstractMap抽象类和SortedMap接口
AbstractMap抽象类:(HashMap继承AbstractMap)覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。映射的哈希码是映射元素哈希码的总和,其中每个元素是Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的哈希码。
SortedMap接口:(TreeMap继承自SortedMap)它用来保持键的有序顺序。SortedMap接口为映像的视图(子集),包括两个端点提供了访问方法。除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet一样。添加到SortedMap实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeMap类是它的唯一一份实现。
2.两种常规Map实现
HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。
(1)HashMap(): 构建一个空的哈希映像
(2)HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射
(3)HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像
(4)HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像
TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。
(1)TreeMap():构建一个空的映像树
(2)TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素
(3)TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序
(4)TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序
3.两种常规Map性能
HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
4.总结
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
发表评论
-
读取修改配置文件
2014-08-13 15:34 1367读取修改配置文件 分类: util类 2014-07-15 1 ... -
Jconsole、jvisualvm工具介绍
2014-07-27 08:52 677http://zz563143188.iteye.com/bl ... -
java动态代理学习笔记
2014-05-09 09:48 455java动态代理学习笔记 博客分类: java JavaCC ... -
[置顶] 这些年收藏的技术大牛的博客分享(后续还会继续更新)大家可以在评论中分享自己关注的
2014-04-28 00:41 650大家也可以在评论中分享自己关注的博客 个人感觉一些比较好的。 ... -
浅谈Java中的equals和==
2014-04-24 00:08 652浅谈Java中的equals和== 在初学Java时, ... -
由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理
2014-04-03 01:53 1003由浅入深分析mybatis通过动态代理实现拦截器(插件) ... -
Java开发的一些小经验一(判断字符串是否为空)
2014-04-02 01:58 1200在做Java开发的过程中,经常会有一些这样或那样的错误,这些 ... -
Java性能调优续
2014-03-17 08:34 598Java性能调优续 3.2 字 ... -
Java多线程笔记6-ThreadPoolExecutor/ExecutorService
2014-01-13 18:22 1060Java多线程笔记6-ThreadPoolExecutor/ ... -
url中文参数传递乱码
2013-11-14 18:49 772我这样就行了啊 XML/HTML code? ... -
一个简单的Web服务器(Web服务器如何工作)
2013-10-22 20:13 706一个简单的Web服务器(Web服务器如何工作) ... -
小记wsdl2java
2013-10-22 20:07 1315缘由要实现协同工作,在不同的平台交换数据,是以有一个wsdl ... -
总结 20 个开发细节
2013-09-28 01:30 703总结 20 个开发细节 博客分类: 研发管理 ... -
org.w3c.dom(java dom)解析XML文档
2013-07-19 21:06 964org.w3c.dom(java dom)解析XML文档 ... -
【摘抄】同步和争用以及减少争用的手段
2013-06-26 23:29 705【摘抄】同步和争用以及减少争用的手段 博客 ... -
SimpleDateFormat使用详解(转载)
2013-06-26 23:03 7public class SimpleDateFormat ... -
SimpleDateFormat性能调优(转载)
2013-06-26 23:01 2604博客分类: java 多线程华为Mapreduc ... -
java 加密
2013-02-23 21:02 1466本篇内容简要介绍BASE64、MD5、SHA、HMAC ...
相关推荐
在Java编程语言中,`HashMap`、`TreeMap`和`LinkedHashMap`都是`java.util.Map`接口的实现,它们提供了不同的数据存储和访问策略。本文将深入探讨这三种数据结构的特点、工作原理以及适用场景。 1. **HashMap** `...
Java中的`TreeMap`是一个基于红黑树(Red-Black Tree)数据结构的有序映射容器。它维护了键的自然顺序或者根据提供的比较器进行排序。...阅读"TreeMap in Java.pdf"文档将进一步深入理解其内部工作原理和高级用法。
适用人群:适合具有一定Java基础知识的学习者,尤其是想深入了解Java集合框架的开发者和技术人员。 使用场景及目标:① 学习者希望通过此文全面掌握Map接口及其主要实现类的功能与应用场景;② 开发人员希望在实际...
Java 编程从零到精通的综合训练营课程涵盖的主题第 1 部分让我们来了解 Java第 2 节Java 中的原始数据类型第 3 节Java 程序执行时幕后发生了什么...19 节Java 中的泛型第 20 节深入研究 Map、HashMap、TreeMap、LinkedH
在本篇文章中,我们将深入探讨Java集合框架中的主要接口和类,以及它们之间的区别。 首先,Java集合框架的核心接口包括`Collection`、`List`、`Set`和`Map`。`Collection`是最基本的接口,它是所有单值容器的父接口...
ava基础 基础知识 ...Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb
本资源聚焦于Java集合中的四个关键类:HashSet、TreeSet、HashMap和TreeMap,它们分别代表了不同类型的集合容器。 1. **HashSet**:HashSet是一个不允许重复元素的无序集合。它基于哈希表实现,插入和查找操作的...
集合框架是Java库的核心部分,包括List、Set和Map接口以及它们的实现类,如ArrayList、LinkedList、HashSet、TreeSet、HashMap和TreeMap等。了解它们的特点和应用场景,以及泛型、迭代器和流API的使用,能够提高代码...
适合人群:具备Java编程基础的Android开发者,特别是希望深入了解集合框架原理和性能优化的技术人员。 使用场景及目标:① 理解集合框架的内部实现和性能特征,优化数据管理和应用性能;② 学习如何在Android开发中...
《深入理解Java HashMap》 HashMap是Java编程语言中一个重要的数据结构,属于集合框架的一部分,提供了高效的键值对存储和查找功能。它基于哈希表原理实现,允许我们以O(1)的时间复杂度进行插入、删除和查找操作。...
在Java中,最常见的对象容器包括ArrayList、List、Set和HashMap等。这些容器各自具有不同的特性和用途,理解并熟练掌握它们对于提升Java编程能力至关重要。 ArrayList是Java集合框架中的一个动态数组,它允许我们在...
例如,集合框架是Java编程中非常重要的部分,它包括了List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口和实现,这些容器类帮助我们组织和管理数据。 在实际开发中,...
在面试中,HashMap的深入理解往往被视为衡量开发者基础扎实的重要标准。本资料将全面解析HashMap的工作原理、实现机制以及相关的面试知识点。 HashMap的核心特性是通过哈希算法快速定位元素,提供O(1)的平均时间...
3. 多态:深入理解多态的概念,包括方法的重写(override)和重载(overload)。 4. 接口:了解接口的定义、实现方式,以及接口与抽象类的区别。 5. 包:理解包的作用,如何导入和使用包内的类。 三、集合框架 1...
重点探讨了 Java集合框架中的 Map接口及其主要实现类(HashMap、TreeMap、LinkedHashMap),并通过示例代码展示它们的使用方法。文章还深入讨论了泛型在 Map中的应用及其优缺点,最后介绍了一些高级用法,如自定义 ...
- **Map接口的实现类**:TreeMap、ConcurrentHashMap等,并了解它们的区别。 12. **IO与NIO** - **传统IO**:理解字节流和字符流,学习流的链接和转换。 - **NIO(非阻塞I/O)**:理解选择器、通道和缓冲区,...