随笔分类 -  【112】JDK源码

摘要:序言 Java中HashMap采用了链地址法。链地址法,简单来说,就是数组加链表的结合。在每个数组元素上都一个链表结构,当数据被Hash后,得到数组下标,把数据放在对应下标元素的链表上。 HashMap的put方法 数组长度为2的n次幂 当数组长度为2的n次幂的时候,不同的key算得得index相同 阅读全文
posted @ 2020-09-15 22:22 ~沐风 阅读(130) 评论(0) 推荐(0) 编辑
摘要:序言 /* * Copyright (C) 2013, 2014 Brett Wooldridge * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file exce 阅读全文
posted @ 2019-12-27 20:28 ~沐风 阅读(542) 评论(0) 推荐(0) 编辑
摘要:序言 ArrayList底层通过数组实现。 ArrayList即动态数组,实现了动态的添加和减少元素。 需要注意的是,容量拓展,是创建一个新的数组,然后将旧数组上的数组copy到新数组,这是一个很大的消耗。 所以在我们使用ArrayList时,最好能预计数据的大小,在第一次创建时就申请够内存。这就是 阅读全文
posted @ 2019-04-08 14:15 ~沐风 阅读(168) 评论(0) 推荐(0) 编辑
摘要:序言 LinkedList是一个双向链表 也就是说list中的每个元素,在存储自身值之外,还 额外存储了其前一个和后一个元素的地址,所以也就可以很方便地根据当前元素获取到其前后的元素 链表的尾部元素的后一个节点是链表的头节点;而链表的头结点前一个节点则是则是链表的尾节点(是不是有点像贪吃蛇最后 头吃 阅读全文
posted @ 2019-04-08 14:15 ~沐风 阅读(588) 评论(0) 推荐(0) 编辑
摘要:序言 《1》栈内存和堆内存当一个方法执行时,每个方法都会建立自己的内存栈,在这方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。所有在方法中定义的局部变量都是存放在栈内存中的;在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的 阅读全文
posted @ 2019-04-08 14:14 ~沐风 阅读(578) 评论(0) 推荐(0) 编辑
摘要:序言 当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。 红黑树的应用 红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。 例如,Java集合中的TreeSet和TreeMap,C++ STL中 阅读全文
posted @ 2019-03-15 19:41 ~沐风 阅读(276) 评论(0) 推荐(0) 编辑
摘要:序言 触摸本质才能永垂不朽 为什么面试都喜欢问HashMap HashMap(无序、线程不安全)作为一个键值对(key-value)的常见集合,在整个java的使用过程中都起着举足轻重的作用。 HashMap数据结构 HashMap底层是基于散列算法实现,散列算法分为散列再探测和拉链式。 HashM 阅读全文
posted @ 2019-01-31 20:04 ~沐风 阅读(178) 评论(0) 推荐(0) 编辑
摘要:序言 Java 8 之默认方法(Default Methods) public interface Player { String getName(); default boolean isMale() { return true; } } 增加default方法。对已有的接口,如果想对接口增加一个 阅读全文
posted @ 2018-04-11 15:05 ~沐风 阅读(243) 评论(0) 推荐(0) 编辑