先说说大体的情况:
我用的idea,在阅读HashMap的源码时候,我大体看懂了。但整体的一个数据具体储和流程我想用idea去走下断点,然后我就在自己的springboot项目里写了个测试类,然后简简单单、板板正正的new HashMap,然后put一下,get一下。然后我就点debug按钮开始执行了。然后很顺利的渗透到HashMap的内部,但TM遇到了一个骚问题(请允许我用一个艹),如下:
传进去的对象是这么个玩意,然后我以为是idea设置的有问题吧。我就百度了下,基本就几种情况:
1、
就是把这两个勾选去掉。
2、或者是因为jdk不支持在源码debug,需要解压rt,然后再重新替换
3、还有说需要额外下一个外国 大佬版本的jdk
4、在断点那里右键可以加condition(也就是例如一个for循环,你可以在当i等于某个值的时候暂停吧)
5、还有说什么重新安装jdk、idea、重启电脑(你咋不再买台新电脑呢)
大体就这些,然后我就各种尝试,还是那样。最后我也重启电脑,然而卵用没有。
第二天,我找了个群,有个大佬回复说可能因为不只你自己调用HashMap,例如jdk啊,很多的jar里面的问题也会调用的。我当时就有点明白了,但他也没说咋解决。我就先阅读源码去了,我看到链表转红黑树那段代码的时候,回去比较两个key的class类型。然后我就去跟了一下String的compareTo方法,我再一次在源码打了断点。然后瞎几把点了两下,我发现传入的参数有我自定义的参数,我灵光一闪。是不是我调用的方式不对呢?
重点来了!!!!!!!!!!!!!!!!!
然后我就启动了我的springboot项目,在HashMap的内部打了断点,启动的时候就触发了。然后我先干掉,启动好了。我再次打上,调用了一个方法。在请求前,还会由别的类调用。先去掉HashMap里面的断点,等真正走到你接口那个方法(这里面最好打上一个断点,就get方法那)的时候再在源码里面打上就可以了。
这个东西怎么说呢,也算是个小心得吧。反正静下心来多想想,解决了的感觉还是很不错的。如果同样遇到这个问题困扰你很久的老铁,希望能给到你帮助哈。大佬们就当看个笑话吧,哈哈
对了,还有就是阅读这个HashMap的源码前,最好是理解一下 数组、链表、二叉树、二叉搜索树、红黑树这些东西,这样看起来还可以。讲道理,看看这些骚东西比TM成天写那些crud有意思多了,但就是看的脑子疼,可能是比较菜的缘故。。。。。。。。。