最近需要用到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找到集合,数组下标的效率就不必说了吧,集合中元素又很少,一比对之后就出结果了。
当然以上讲述很绕口,估计过段时间我都看不懂了,下边画个图。
图中的hashcode值由特殊方式得来,此处不做赘述。hashcode的设计思路是以空间换时间的思路。
下边说下hashset,因为少见所以少写一点,
1,hashSet中的元素,不能重复,因为底层就是hashMap的键,键不能重复都是知道的
2,没有顺序,严格的说,是没有按照元素的插入顺序排列
3,hashSet没有get()来获取指定位置的元素 ,所以遍历需要用到迭代器,或者增强型for循环
over!!