- 博客(17)
- 收藏
- 关注
原创 HashMap解读(二)
上一篇我们研究完put()方法,这也让我们对HashMap的存储原理有了一些认识,我们接下来简单的看看其他常用方法。get()方法最常用的方法:通过key找到对应的value,有点映射的味道。 public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; }给个结点对象e,通过形参key去我的“仓库
2020-07-23 16:06:20 193
原创 HashMap解读(一)
HashMap原理以jdk1.8进入主题。存储原理:源码解读:初始数据:先看几个较为重要的属性(越少你看的越清楚) //数组长度的初始值 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //当数组被用了(3/4),给数组扩容 static final float DEFAULT_LOAD_FACTOR = 0.75f; //当链表长度大于8: 链表变红黑树 //当红黑
2020-06-27 10:22:20 242
原创 LinkedList源码
第八周源码问题:LinkedList删除元素一定比ArrayList快吗?put()方法:remove()方法源码问题:LinkedList删除元素一定比ArrayList快吗?put()方法: public boolean add(E e) { linkLast(e); return true; } void linkLast(E e) { final Node<E> l = last; f
2020-06-10 10:51:05 278
原创 ArrayList底层(二)
第七周有参构造:有参add方法:1.rangeCheckForAdd()2.ensureCapacityInternal()3.System.arraycopy()有参构造:public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCap
2020-06-03 13:24:38 417
原创 ArrayList底层
第六周存储结构:1.构造方法:1.add方法:存储结构:我们向ArrayList中加入新的元素,分析这个添加的过程来分析ArrayList存储结构。1.构造方法:像使用ArrayList首先需要实列化一个它的对象出来,我们去源码中看看实例化对应的构造方法! private static final int DEFAULT_CAPACITY = 10; transient Object[] elementData; private static final Object[
2020-06-02 17:26:30 184
原创 手写红黑树
红黑树(二)一.插入插入的所有结点默认是红色。插入结点称为默认结点1.变色:条件:父亲结点是红色,叔叔结点是红色操作:(1)父亲结点变成黑色。(2)叔叔结点变成黑色。(3)爷爷结点变成红色。(4)当前结点设为爷爷。2.旋转条件:当前父结点是红色,叔叔是黑色,当前结点是右子树。操作:以父结点左旋,当前结点设为父结点。条件:当前父结点是红色,叔叔是黑色,当前结点是左字数。操作:(1)父亲结点变成黑色(2)把爷爷结点变成红色(3)以爷爷结点右旋3.代码首先来颗红黑树:假设
2020-05-29 22:32:20 1420
原创 红黑树
一.什么是红黑树:1.红黑树是二叉查找树的一种,将二叉树的节点给他标上red和black两种颜色。2.二叉树有退化成链表的可能,红黑树是一种近似平衡的树。例如下面这颗树:二.红黑树性质所谓的红黑树,只需要满足一些特有的性质,那我们就将他称为红黑树。网上很多五个性质。1.这课树的节点只能是红色或者黑色两种颜色。2.根节点必须是黑色3.不可以有连在一起的红色节点4.所有红色节点的子结点都是黑色,叶子结点(null结点)也是黑色的。随便来个红黑树:三.左旋和右旋1.左旋:以A作为根节
2020-05-29 16:45:52 174
原创 遍历HashMap
第五周HashMap遍历方式1.增强型for遍历1.迭代器遍历HashMap遍历方式1.增强型for遍历直接看代码: String dog1 = ("田园犬"); String dog2 = ("萨摩耶"); String dog3 = ("哈士奇"); Map map = new HashMap(); map.put("大黄", dog1); map.put("火腿", dog2); map.put("薯片", dog3);
2020-05-16 11:02:36 245
原创 被诅咒的循环
第五周循环谜题解:循环谜题while(i<=j&&j<=i&&i!=j){ }如上代码我们只能对i和j进行声明,这个循环可能被执行吗?从逻辑上看,这样的逻辑绝对不可能存在。解:通过我的上两篇帖子介绍了 :==和equals的区别。我们发现==有两种比较情况,其一是比值,其二是比地址值,我们理解的逻辑不存在的情况是前者比的...
2020-05-07 11:31:53 138
原创 equals比较对象
第四周equals类和对象类:对象:关系:equals比较:equals上一篇讲了String类中的equals方法,由于String是由多个char组成,所以可以转换成char数组逐个比较。类和对象类:对事物的一个分类,他们具有相同的属性和动作。对象:世间万物皆对象。关系:类是对象的抽象。对象是类的实体。equals比较:Dog dog1 = new Dog("旺财");...
2020-05-07 11:01:32 789
原创 == 和 equals() 的区别
第四周== 和 equals() 的区别1. ==2.equals()== 和 equals() 的区别1. ==关系运算符的一种,字面意思比较两者是否相同。深层次来看,我们使用的变量或常量类型划分为基本数据类型和引用数据类型。基本数据类型:比较的是两者的值(int,float,char)引用数据类型:标记的是两者的内存地址(String,对象)2.equals()由于经...
2020-05-06 15:32:09 109
原创 冒泡优化
第三周代码思路对比:经典冒泡:优化冒泡:代码废话少说,先上代码:System.out.print("排序前:"); for(int i=0;i<N;i++){ a[i] = (int)(Math.random()*1000); System.out.print(a[i]+" "); } System.out.println(); for(int i=0;i&...
2020-04-28 15:13:26 291
原创 冒泡排序
第三周冒泡排序算法:第一次冒泡:第二次冒泡:总结:代码:冒泡排序见名如闻其意,就像鱼儿吐泡泡,将大的数向上(后)冒泡泡。算法:将泡泡向后冒的这个过程是一个重复的过程,必然用到for,所以这个经典算法主要在循环次数上做出改变,用循环去模仿冒泡泡的过程,完成对数组的排序:算法模仿:第一次冒泡:通过这几张图片可以清晰的看出第一次冒泡泡成功的把真个数组中最大的数字9翻到了最后,而...
2020-04-28 14:50:45 589
原创 循环
第二周闰年判断思路具体代码闰年判断读入一个表示年份的整数,判断这一年是否是闰年。如何判断一个年份是否是闰年:1.如果这个年份能够被4 整除,且不能被100 整除,则这一年是闰年。例如,1996 年是闰年,而相应的,1993 年就不是闰年。2.如果这个年份能够被100 整除,则这个数必须要能被400 整除,才是闰年。例如,2000 年是闰年,1900 年不是闰年。思路这个问题一眼就能看出...
2020-04-23 14:47:18 126
原创 闰年
第二周闰年判断思路具体代码闰年判断读入一个表示年份的整数,判断这一年是否是闰年。如何判断一个年份是否是闰年:1.如果这个年份能够被4 整除,且不能被100 整除,则这一年是闰年。例如,1996 年是闰年,而相应的,1993 年就不是闰年。2.如果这个年份能够被100 整除,则这个数必须要能被400 整除,才是闰年。例如,2000 年是闰年,1900 年不是闰年。思路这个问题一眼就能看出...
2020-04-20 16:18:01 574
原创 JDK环境变量配置
第一周出现的问题配置环境变量问题解决方案其他出现的问题由于有一些简单的基础,第一周的学习出现的问题并不多,唯一可圈可点的地方在于配置环境变量。由于以前尝试过网上的配置方法,这里出现了一些小问题使我的javac -version始终找不到版本。配置环境变量上课内容:此电脑 --> 属性 --> 高级系统设置 -->系统变量中的新建 -->变量名:J...
2020-04-12 15:56:15 170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人