JDK源码
AdventureLL
身体和灵魂 总有一个要在路上
展开
-
equals和hashcode
为什么重写equals时需要重写hashcode(java中对象==判断的是地址基本类型int,char,long这些判断的是值是否相等)顶级父类Object中的equals方法是使用的==判断两个对象在内存中的地址空间是否相等,我们new了两个对象,我们给予对象赋予同样的属性,但是地址空间任然不会相同,但是实际上我们认为这两个对象是相同的,因此需要重写equals方法。重写hashcod...原创 2018-09-12 18:33:13 · 176 阅读 · 0 评论 -
HashMap
HashMap实现原理HashMap维护了静态类entry<k,v>,和一个entry数组,每次put和set的时候根据key来通过自己的hash()方法获取hashcode,通过hashcode与数组大小运算获取存放地址,从地址中获取需要的值。Hashcode可能会出现hash碰撞,hashMap的解决方法为:1.通过使用hashcode与数组大小length-1进行位与&...原创 2018-09-12 18:35:36 · 124 阅读 · 0 评论 -
String、StringBuffer、StringBuilder
StringString类是使用final修饰的,因此经常使用String类型值作为HashMap的key,String类内部使用char[]来实现的String类重写的equals和hashcode对象顶级父类Object类的equals方法中equals是根据==判断,判断的是内存中的地址空间,hashcode是使用native修饰的int类型值,String重写后判断equals为判...原创 2018-09-12 18:37:08 · 158 阅读 · 0 评论 -
LinkedList与ArrayList与Vector
LinkedList与ArrayList与Vector三个都是List接口下的实现类。LinkedList是用链表实现的,维护了一个静态内Node<E e>,静态类只有三个属性,元素前元素,元素本身,元素后元素,每一个元素只记录本身元素的前一个和后一个,因此LinkedList增删快查找慢。查找的时候有个优化判断index与列表的size/2,如果小于则从前往后找,如果大于则从后往前...原创 2018-09-12 18:39:40 · 94 阅读 · 0 评论 -
多线程
多线程线程是程序执行的最小单元,比如我们一个项目启动这是一个进程,每次操作都属于线程。目前的Java项目放到WEB容器中,我们每次点击都是一个线程。我们在后台如果想使用多线程有两种方法,一是继承Thread类,一种是实现Runnable接口,大部分情况使用实现Runnable方式。原因:1.类只能继承一个类,但是可以实现多个接口,继承的方式让我们的代码有了局限性2.如果我们使用多线程来操作共...原创 2018-09-12 18:40:48 · 86 阅读 · 0 评论