码迷,mamicode.com
首页 > 其他好文 > 详细

IT十八掌掌第十二天课程总结

时间:2016-05-28 23:26:20      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:java基础   equals   源代码   课程   元素   

今天学完IT十八掌第十二天java基础课程:


学习内容:

 

技术分享

HashMap和HashTable底层都是采用数组+链表实现的。

结合了数组的寻址快,链表增删快的特点。使用散列算法(hash算法)将元素分配到数组的元素当中,

hash分区默认16个,每个分区内存储的是链表

1,算出hashcode,进行&0xof取出后四位初步比较,确定分区

2,然后拿对象和链表中每个对象相比较,比较每个对象的hash码是否相同。

技术分享

1. 判断hashcode是否相同

2.判断是否同一对象或者equals返回true

所以之前的结论:HashSet判断元素是否相同与元素是否同一对象无关有缺陷,通过查看源代码

我们知道HashSet底层是采用上述方法判定元素是否相同的。

HashSet底层调用的是HashMap,只关心map的key集合

底层是数组,存储的链表对象。

判断对象是否重复的方法在下图中。

所以这里可以进一步总结HashSet判断元素是否相同的原理。

首先,判断hashCode是否相同,否,两元素不重复;是,进一步判断

其次,两个对象是否是同一对象,是,两元素重复( | | 短路);否,进一步判断

再次,eauals方法返回true,两元素重复,返回false,两元素不重复。

判断完毕

技术分享

二,Collections和Arrays工具类




遇到的问题:

1,  HashMap的entrySet()和keySet()方法遍历集合。

2, 使用增强for循环迭代集合

3, Debug使用不熟练,

4,线程安全的集合Vector,HashTable使用。

5,hash算法以及HashMap原理实现。



需要帮助的问题

HashMap底层原理以及HashSet的区别与联系没听懂,对数据结构知识不熟悉

本文出自 “菜鸟成就数据之路” 博客,转载请与作者联系!

IT十八掌掌第十二天课程总结

标签:java基础   equals   源代码   课程   元素   

原文地址:http://liubx.blog.51cto.com/11235064/1784110

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!