总体框架
下面对上面的文章做一下总结,一些在上面文章中没有涉及到的点,在详细的说明一下。
Set和Map的关系
Set代表一种无序不可重复的集合,Map代表一种由多个Key-Value对组成的集合。表面上看它们之间似乎没有啥关系,但是Map可以看成是Set的扩展。为什么这么说呢?看下面的这个例子:
在Map的方法中有一个这样的方法,Set keySet() ,也就是说Map中的键可以转化成一个Set集合。如果把value看成key的一个附属品,或者把key-value看成是一个整体,那么Map集合就变成了一个Set集合。
HashSet和HashMap的关系
HashSet和HashMap有很多的相似之处,对于HashSet而言,采用了Hash算法来决定元素的存储位置,HashMap而言,将value当成了key的附属品,根据Key的Hash值来决定存放的位置。
有一点需要说明一下,经常听说,集合存储的是对象, 这其实是不准确的。准确来说,集合中存储的其实是对象的引用地址或者称为引用变量。而引用地址或者引用变量指向了实际的java对象。java集合实际是引用变量的集合而非java对象的集合。
通过之前的源码解析其实可以发现,HashMap在存放key-value时,并没有过多的考虑value的内容。只是根据key来确定key-value对在数组中应该存放的位置。HashMap的底层是一个Entry[]数组,key-value组成了一个entry。当需要向HashMap中添加元素时,首先根据key的hashcode来确定在数组中存放的位置,如果key为