- 博客(14)
- 资源 (9)
- 收藏
- 关注
原创 让星星⭐月亮告诉你,Java冒泡排序及其时间复杂度计算
@author Dylaniou2020-05-28 21:21冒泡排序算法:第一轮冒泡排序:第一次拿数组的第1位和第2位进行比较,若第1位大于第2位,则将两者的值交换,再继续拿交换后的第1位与第3位进行比较,若第1位大于第3位,则将两者的值交换,然后再继续拿交换后的第1位与后续位进行比较,直到第1位与后续所有位置都比较完毕,最后会发现第一轮冒泡排序的最终结果是把最小值放到了第1位;第二轮冒泡排序:因为第一轮已经把最小值放到了第1位,则第二轮应该从第2位开始第一次拿数组的第2.
2020-05-28 23:11:18 1302
转载 让星星⭐月亮告诉你,原码、反码、补码以及为什么要用反码和补码
转载自:cumtchwWhen you learn a knowledge, you must reach the level that you can use it profiently, not just know it or be familiar with ithttps://www.cnblogs.com/cumtchw/p/4523332.html机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数,机器数是带符号的,在计算机中用一个数的最高位存放符号,正数为0,负数为1,比如,
2020-05-21 21:35:15 686
原创 让星星⭐月亮告诉你,LinkedList和ArrayList底层数据结构及方法源码说明
一、LinkedList(同时实现了List接口和Deque implements Queue接口)1.LinkedList底层数据结构是一个双向链表(每个节点除了本身元素外,还包含了要指向的前一个节点Node prev和后一个节点Node next),双向链表还记录了头节点Node first和尾节点Node last.2.链表的数据结构在逻辑上是连续的,但是在物理空间上是不连续的(因此,索引下标和头元素存放的物理内存地址是不相关的,所以不能根据索引下标直接获取到元素,需要循环遍历);3.Linke
2020-05-21 20:57:55 945
原创 让星星⭐月亮告诉你,2的n次幂与二进制位全为1之间的联系,为啥只差一个1
现象:2^3 = 8 = (1+2+4) +1 =(20+21+2^2)+1 即23-1=(20+21+22)2^4 = 16 = (1+2+4+8) +1 =(20+21+22+23)+1 即24-1=(20+21+22+2^3)观察上述现象,可以发现2^n次幂等于2的0次幂到2的(n-1)次幂的所有值相加后再加1.而2的0次幂到2的(n-1)次幂是连续的,对应到二进制的位里面,就全是连续的1111*111啦,在HashMap中计算数组下标时,就利用到了这一特性:数组长度为2^n(通过HashMa
2020-05-21 11:21:44 1027
原创 让星星⭐月亮告诉你,HashMap之tableSizeFor(int cap)方法原理详解(分2的n次幂和非2的n次幂两种情况讨论)
方法说明:HashMap的tableSizeFor(int cap)方法,可以返回一个大于或等于给定cap值的2的n次幂的数值. /** * Returns a power of two size for the given target capacity. */ static final int tableSizeFor(int cap) { int n = cap - 1; //第一点:这里减1,是为了保证本身已经是2的n次幂的情形下(2^3
2020-05-21 11:08:47 470
原创 让星星⭐月亮告诉你,红黑树实现自平衡的原理图解及与二叉查找树的比较
1.红黑树五大原则:(1)节点为红色或黑色(2)根节点为黑色(3)红色节点的子节点和父节点不能为红色(4)从根节点到所有叶子节点的路径中黑色节点个数相同(5)叶子节点为黑色2.在红黑树增删数据时,先增删,增删后若不满足五大原则,则再对其进行调整(左旋、右旋、颜色改变),调整的处理实际上是节点属性值(节点颜色、节点父子节点的左右子树)的改变。3.有五大原则做保证,红黑树能实现自平衡,保证从根节点到叶子节点的所有路径中的最长路径不超过最短路径的2倍.(举例:根节点到左子树叶子节点全是黑色,而右子树
2020-05-21 09:47:56 549
原创 让星星⭐月亮告诉你,HashMap底层数据结构及其增put删remove查get方法的代码实现原理
1.HashMap底层数据结构是数组+链表(jdk1.7头插法<扩容时链表逆序可能会导致环形链表的问题出现> jdk1.8尾插法)+红黑树(jdk1.8).2.HashMap中数组的容量默认为16,负载因子默认为0.75,当数组的0-15个下标里有160.75=12个被使用时,且HashMap中存储的元素总个数大于64时,则发生扩容操作,数组的容量扩大为原来的2n.3.负载因子代表数组中存储数据密度的大小:负载因子越大,数组单位容量内存储的数据越多,不同元素之间(key不同,但计算得到的数组
2020-05-21 09:20:03 352
原创 让星星⭐月亮告诉你,正数负数的二进制位运算(左移 右移 无符号右移)
正数和负数需先转换成相应的二进制,再进行移位运算.详细举例如下:1、左移(向左移动,低位补0,没有无符号左移,因为左移不影响符号位):(1)正数左移 2<<1(a)2为正数,其原码反码和补码均 00000000 00000000 00000000 00000010(b)00000000 00000000 00000000 00000010 <<1 = 00000000 00000000 00000000 00000100 = 4(2)负数左移 -2<<1(a
2020-05-20 15:51:25 2720 2
原创 让星星⭐月亮告诉你,二进制加减运算基础
1.二进制只有0和12.二进制加减计算时逢二进一,就像十进制加减时是逢十进一,加法运算时很容易理解,但是减法运算时可能会有点不好理解,下面举例说明:3.二进制加法: 0+0=0 0+1=1 1+1=104.二进制减法: 0-0=0 0-1=1 注意:此时,由于0<1,0减1时,会向前借一位,本身变成2,[情形1]若被借的前一位是0,则还会继续向前借位,[情形2]若被借的一位是1,则直接减一),具体情形如下: [情形1] [情形2]
2020-05-20 13:36:11 1110
原创 让星星⭐月亮告诉你,二进制加减运算进阶(原码/反码/补码/-1-1=(-1)+(-1)=-2)
计算机中数据以二进制方式0或1进行存储,计算时也采用二进制进行,二进制计算过程中涉及到以下概念原码:数据对应的二进制表示,首位代表符号位0-正数,1-负数;反码:正数的反码等于其原码;负数的反码是在其原码的基础上,符号位不变,其他位取反;补码:由于直接采用反码计算,符号位也会参与计算,导致最终结果不准确,所以引进了补码.正数的补码等于其反码同样等于其原码;负数的补码等于其反码+1.所以,在根据补码推算原码时,需要逆向计算,先补码末位-1,再取反.举例:-1-1=(-1)+(-1)=-2(1)-1的
2020-05-20 13:15:08 2508
原创 让星星⭐月亮告诉你,Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
启动Java程序start.sh脚本脚本:nohup java -Dfile.encoding=GBK -Xmx3000M -cp ./lib/PrdCommon.jar:./lib/PrjTrade.jar com.ylink.TradeServer >output.log 2>&1 &tail -f output.log说明:1)nohup代表忽略hup挂起信号,即不挂起2)java代表启动java程序的java命令3)-Dfile.encoding=GBK代.
2020-05-19 11:58:48 2261 2
原创 让星星⭐月亮告诉你,vi 常用命令
vi 常用命令i-插入模式 esc-退出插入模式,进入命令模式 :-底行模式gg或{-到段落首位 }-到段落末尾G-到尾行首位 0-到光标当前所在行首dd-删除当前行 d0-删至行首 d$-删至行尾 x-删除当前光标所在字符 X-删除光标前的字符:w-存盘 :q-退出 :x-存盘退出 :q!-不存盘退出 :wq-存盘退出/-从光标开始处向文件尾查找?-从光标开始处向文件头查找n-在同一方向重复上一次搜索命令N-在相反方向重复上一次搜索命令:s/p1/p2/g-将当前行所以的p1用p2替代
2020-05-19 09:22:53 231
原创 让星星⭐月亮告诉你,LinkedList和ArrayList(指定位置/头尾增加删除)
代码执行结论:/*现象:LinkedList在指定位置采用add(index,data)方式增加数据时,位置越靠前耗时越少,越靠后耗时越多(而ArrayList采用add(index,data)方式的耗时跟位置关系不大);原因:虽说LinkedList底层属于链表数据结构,不需要开辟一块连续的内存地址空间,逻辑上连续即可,在新增、插入和删除操作上占优势(只需要修改节点的前后指向即可,不需要移动数据);但是因为LinkedList在插入时需要移动指针到指定节点, 才能开始插入,一旦要插入的位置比较远,
2020-05-08 18:08:28 3240 2
原创 让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
package nio;import java.nio.ByteBuffer;public class BufferTest {public static void main(String[] args) throws InterruptedException {ByteBuffer buf = ByteBuffer.allocate(9);System.out.println("初始c...
2020-05-08 11:02:48 212
(003)HashMap中红黑树TreeNode的split方法源码解读.docx
2020-06-20
(002)HashMap$TreeNode之往红黑树添加元素-putTreeVal方法.docx
2020-06-18
从底层数据结构和CPU缓存两方面剖析LinkedList的查询效率为什么比ArrayList低.docx
2020-06-17
HashMap在put数据时是如何找到要存放的位置的?.docx
2020-06-17
(006)HashMap$TreeNode确保根节点为头节点的moveRootToFront方法源码解读.docx
2020-06-17
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导.docx
2020-06-17
(001)HashMap之链表转红黑树-treefyBin方法.docx
2020-06-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人