欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HashMap与HashSet解读

程序员文章站 2022-05-23 16:26:34
...

最近需要用到javasrcipt的知识,回头去梳理学习的时候,发现自己的某些问题了,回忆起当年,那个教我js知识的老师很年轻,年轻就是嚣张,讲课很快,感觉是生怕我们听得懂显不出他技术的高深一样,上课还总喜欢问懂了吗,并不是我一人有这个感觉,同学也是觉得有问题。那时候这块技术就给我潜意识留下阴影了,后边看到js这块技术就会头皮发麻,想认真去学这块内容的时候也会没办法集中精力深度思考问题,感觉是心病,其实js压根就没有多少内容也并不高深,但是一朝被蛇咬十年怕井绳。像是初中高中时候物理化学地理之类的学科,有时是否开了个好头,就已经决定最终这门功课的好坏了的,当然学校属于相对*的教学形式。

学习技术,必须保持兴趣,不能太逼迫自己去接收新知识,一旦在学习中尝到太多的痛苦潜意识开始抗拒的话,得不偿失,这条路就走不远了,以上仅是个人感想。

下边开始正题

HashMap是键值对存储形式,put()方法添加,get()方法获取,键不可重复,值可重复,代码如下

package collection;
   
import java.util.HashMap;
   
public class TestCollection {
    public static void main(String[] args) {
        
		HashMap<String,String> users = new HashMap<>();
        users.put("id1", "name1");
        users.put("id2", "name2");
        users.put("id3", "name2");
       
        System.out.println(users.get("id1"));
    }
}

然后是得说下hashMap的性能是非常卓越的,这里需要解释一下,他的特殊的底层结构了。

大概描述一下,hashMap存储数据的底层是这样的:

hashMap的每个键都有对应的hashCode值,不同的键可以共享一个hashCode值,每个hashCode值对应一个LinkedList<Entry<key,value>>链表集合,集合中的Entry<key,value>对象中就有键值对数据,而hashCode值就是一个数组的下标,集合是存在数组中的。所以呢,查找起来很快,性能很好,先是由下标hashCode找到集合,数组下标的效率就不必说了吧,集合中元素又很少,一比对之后就出结果了。

当然以上讲述很绕口,估计过段时间我都看不懂了,下边画个图。

HashMap与HashSet解读

图中的hashcode值由特殊方式得来,此处不做赘述。hashcode的设计思路是以空间换时间的思路。


下边说下hashset,因为少见所以少写一点,

1,hashSet中的元素,不能重复,因为底层就是hashMap的键,键不能重复都是知道的

2,没有顺序,严格的说,是没有按照元素的插入顺序排列

3,hashSet没有get()来获取指定位置的元素 ,所以遍历需要用到迭代器,或者增强型for循环


over!!


相关标签: 集合