这两天一直在看HashMap。 这个Map感觉很优雅啊
本来是看List,看完之后,接着看Set的,发现Set实现的底层大都是利用的Map。 只好扭过头看Map了
HashSet底层就是一个HashMap, 这个HashSet保存数据,只保存key。 value是一个通用的无效对象(不会被访问的对象,好像是空对象吧。。。没注意)
TreeSet底层就。。。和二叉树的目前真是不会, 太费脑子了。。。暂且会用即可
Map里面我感觉主要有两中实现
一种就是HashMap(HashTable和他差不多)
一种就是TreeMap(表示这个Map的底层真的看不明白。。。只知道是二叉树实现的,但是二叉树本来就不太了解,所以就悲剧了。。。)
HashMap的底层啊,我感觉就是数组和链表的双重保存。 但是这个数组的访问,它不是想ArrayList一样,野蛮的遍历一遍。 而是将存入的新mapping保存为一个Entry, Entry.hash就是key.hashCode()。 然后HashMap使用一个indexOf静态方法,将指定key的哈希值和table.length “&” 一下。 得到新的Entry应该保存的index, 然后将这个新的Entry保存到table[index]中, 当然了, 不同对象的哈希值可能是一样的, 于是如果同一个table[index]如果元素超出一个的话, 就采用链表的方式保存。 因此。 一个HashMap的table[]中, 不是说每一个index上都有元素,也不是说每一个index上都只有一个元素。 而是随意分布的。 可能table[index]上为空, 而table[index+1]上却是一串Entry链表
个人感觉这个HashMap太精辟了
即利用了LinkedList的链表添加元素快捷又避免了LinkedList那样的链表过长导致的索引浪费资源
即利用了ArrayList的数组操作方便又避免了ArrayList那样的结构变化频繁导致的重构资源浪费(个人感觉HashMap的重构频率远远低于ArrayList)
差不多了, 好几天了,一直琢磨Collection的代码, 从明天开始要开始实战了。 做项目,实践自己的理论知识!
计划大二结束前, 完成自己学习计划的第二阶段。 大三主攻第三阶段, 争取将来进入社会是以一个有独特编程思想和构架能力的设计师。 而不是一个到处泛滥的码字员(SSH苦工)
分享到:
相关推荐
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...
在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程需求。本文将重点分析这三种数据结构之间的区别,特别是针对...
HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素;对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统总是...
Java中最常见的容器包括Java集合框架(如ArrayList、HashMap等)、JavaBeans、Enterprise JavaBeans(EJB)、Servlet容器(如Tomcat、Jetty)以及Spring框架中的IoC(控制反转)和DI(依赖注入)容器。 1. **Java...
HashSet中的元素没有顺序,添加元素时,HashSet会将元素转化为键放入HashMap中。因此,HashSet的插入和查找速度与HashMap相当,但由于HashSet不需要存储值,所以它的空间效率略高于HashMap。 在使用HashMap时,需要...
HashSet的实现实际上依赖于HashMap,当向HashSet中添加元素时,HashSet会将元素作为键放入一个内部的HashMap中,值通常是默认的null。因此,HashSet的所有操作,如添加、删除、查找等,都会转化为HashMap的操作。 ...
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:
Java容器详细解析 Java容器是一种基本的数据结构,用于存储和管理对象。Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口...
Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序...
### Java容器学习心得详解 在Java编程中,容器(Containers)是存储和操作对象集合的重要工具,主要包括集合(Collections)和映射(Maps)。本文将深入解析Java容器的关键概念、特性以及不同容器类型的应用场景。 ...
在Java编程语言中,`HashMap`是`java.util`包中的一个核心类,它属于集合框架的一部分,主要用于存储键值对的数据结构。`HashMap`基于哈希表(散列表)实现,提供了快速的插入、删除和查找操作,平均时间复杂度为O(1...
在Java编程中,容器对象是用于存储其他对象的类,它们是Java集合框架的重要组成部分。这篇博客"JAVA容器对象整理"可能涵盖了关于Java中的不同容器类、接口以及它们的使用方式。在这里,我们将深入探讨一些核心的Java...
相比之下,HashSet是基于哈希表(HashMap)实现的集合,不保证元素的顺序,但提供了快速的插入、删除和查找操作。它不允许有重复元素,通过重写对象的equals()和hashCode()方法来确定元素是否相等和在哈希表中的位置...
在Java中,最常见的对象容器包括ArrayList、List、Set和HashMap等。这些容器各自具有不同的特性和用途,理解并熟练掌握它们对于提升Java编程能力至关重要。 ArrayList是Java集合框架中的一个动态数组,它允许我们在...
在Java编程语言中,ArrayList、LinkedList、HashMap和HashSet是四个非常重要的集合类,它们分别代表了不同类型的数据结构。这篇文章将深入探讨这些类的源码,以帮助我们更好地理解和运用它们。 首先,ArrayList是一...
本练习题旨在帮助你深入理解和熟练掌握Java中的容器使用,特别是其核心类库`java.util`中的ArrayList、LinkedList、HashSet、HashMap等。通过解决这些练习题,你将能够更好地了解容器的基本操作,如添加、删除、查找...
在Java编程中,HashMap、HashSet、TreeMap和TreeSet是四种常见的集合类,它们各自有特定的用途和内部实现机制。这些数据结构用于存储和管理数据,其中HashMap和HashSet是基于哈希表实现的,而TreeMap和TreeSet则是...
Map接口代表键值对集合,HashMap是最常用的实现之一。在JDK 1.7中,HashMap是一个数组+链表结构,而在JDK 1.8中引入了红黑树,当桶内元素过多时转换为树结构,以提高查找效率。HashMap不是线程安全的,如果需要线程...
java hashmap 深度剖析,和hashmap 相关面试题
- 与之相比,虽然Java提供线程安全的HashMap替代品如`ConcurrentHashMap`,但HashSet没有线程安全的对应版本。 5. **排序**: - HashSet中的元素没有特定的顺序,插入的顺序可能不等于遍历的顺序。 - HashMap...