内衣秀不容错过的Map接口-Java资源社区

不容错过的Map接口-Java资源社区

精彩内容
每个月总有那么几天忘记带钥匙,而离开家门童年禁恋 !这是一个痛苦的经历何庆魁 !
在Java中也有这样一个接口,他就是强大的Map,他不是麻烦,而是帮我们解决麻烦的良药!接下来小编就带大家了解一下 Map的一些知识:Map1.1. Map 接口
java提供了一组可以以键值对(key-value)的形式存储数据的数据结构铲形币 ,这种数据结构称为Map。我们可以把Map看成一个多行两列的表格陈根楷 ,其中第一列存放key,第二列存放value。
而每一行就相当于一组key-value对三代鬼彻 ,表示一组数据。
Map对存入的元素有一个要求,就是key不能重复,所谓不能重复指的是在Map中不能包含两个equals为true的key都市金牌散仙。
Map对于key大野优美,value的类型没有严格要求,只要是引用类型均可。但是为了保证在使用时不会造成数据混乱,通常我们会使用泛型去约束key与value的类型。1.2. HashMap1.2.1. hash表原理
HashMap是Map的一个常用的子类实现。其实使用散列算法实现的。
HashMap内部维护着一个散列数组(就是一个存放元素的数组)王惠心,我们称其为散列桶,而当我们向HashMap中存入一组键值对时,HashMap首先获取key这个对象的hashcode()方法的返回值花圃的意思,然后使用该值进行一个散列算法,得出一个数字,这个数字就是这组键值对要存入散列数组中的下标位置。
那么得知了下标位置后,HashMap还会查看散列数组当前位置是否包含该元素。(这里要注意的是,散列数组中每个元素并非是直接存储键值对的,而是存入了一个链表,这个链表中的每个节点才是真实保存这组键值对的澳维加。)检查是否包含该元素时根据当前要存入的key在当前散列数组对应位置中的链表里是否已经包含这个key中尉立正稍息,若不包含则将这组键值对存入链表,否则就替换value。
那么在获取元素时,何超雄 HashMap同样先根据key的hashcode值进行散列算法,找到它在散列数组中的位置,然后遍历该位置的链表,找到该key所对应的value之后返回。
看到这里可能有个疑问女配要改嫁 ,链表中应该只能存入一个元素,那么HashMap是如何将key-value存入链表的某个节点的呢?实际上,HashMap会将每组键值对封装为一个Entry的实例古丽扎娜 ,然后将该实例存入链表狼人镇。1.2.2. hashcode方法
HashMap的存取是依赖于key的hashcode方法的返回值的,而hashcode方法实际上是在Object中定义的徐梦璇 。其定义如下:
1.inthashCode()
重写一个类的hashcode()方法有以下注意事项:
1、若一个类重写了equals方法陶伯龄,那么就应当重写hashcode()方法。
2、若两个对象的equals方法比较为true,那么它们应当具有相同的hashcode值。
3、对于同一个对象而言,在内容没有发生改变的情况下,多次调用hashCode()方法应当总是返回相同的值。
4、对于两个对象equals比较为false的纪家闺秀 ,并不要求其hashcode值一定不同,内衣秀 但是应尽量保证不同,这样可以提高散列表性能。1.2.3Map的三种遍历方式