数据结构+java基础(1)+进制之间的转换

数据结构分类:


        逻辑结构分类:

        1.集合结构:集合结构中数据元素除了属于同一个集合外,他们之间没有任何其他的关系。

        2.线性结构:线性结构中的数据元素之间存在一对一的关系。

        3.树形结构:树形结构中的数据元素之间存在一对多的层次关系。

        4.图形结构:图形结构的数据元素是多对多的关系


        物理结构分类:


        1.顺序存储结构        比如:数组

        2.链式存储结构       


位运算符&

        定义:参加运算的两个数据,按二进制位进行"与"运算。

        当&左右同时为true的时候结果才为true

        &其他用途:

        1.清零

        如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

        2.取一个数的指定位

比如取数 X=1010 1110 的后4位,只需要另找一个数Y,令Y的后4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位与运算(X&Y=0000 1110)即可得到X的指定位。

        3.判断奇偶

只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数(参加运算的两个数据,按二进制位进行"与"运算)。

借鉴博客位运算

右移(>>)

        以1234这个数值为例,1234右移1位即: 1234>>1

        (1234转换成二进制)1234右移一位(移除),左边用0补上。

883b04bcd4ce416c9a988166d6aa5fd2.png

         右移后得到的值为 617 和int 类型的数据617除以2取整所得的值一样,所以有些时候也会被用来替代除2操作。同时,对于超过32位的位移,和左移运算符一样,,会先进行位数求余数。

        例如:

if((b & 1) == 1)

==

if(b % 2 ==1)


b = b >> 1

==

b = b / 2

进制与进制间的转化:

        关于进制
        所有数字在计算机底层都以二进制形式存在。
对于整数,有 四种表示方式
二进制 (binary):0,1 ,满 2 进 1. 以 0b 或 0B 开头。
十进制 (decimal):0-9 ,满 10 进 1。
八进制 (octal):0-7 ,满 8 进 1. 以数字 0 开头表示。
十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F 不区分大小写。如:0x21AF +1= 0X21B0。
 
Java 整数常量默认是 int 类型,当用二进制定义整数时,其第 32 位是 符号位;当是 long 类型时,二进制默认占 64 位,第 64 位是符号位。
在Integer类型中有静态方法toBinaryString(int i),这个方法的功能将十进制转换为二进制输出。
System.out.println("1234二进制数为" + Integer.toBinaryString(1234));
1234二进制数为10011010010

同理还有很多函数:

十进制转成十六进制:
Integer.toHexString(int i)
十进制转成八进制
Integer.toOctalString(int i)
十进制转成二进制
Integer toBinaryString(int i)
十六进制转成十进制
Integer.valueOf("FFFF",1 6).toString()
八进制转成十进制
Integer.valueOf("876" ,8).toString()
二进制转十进制
Integer.valueOf("0101",2).toString()

(二进制转成十进制乘以 2 的幂数, 十进制转成二进制除以 2 取余数。 )

java简史(为了这离谱的发文助手):

1991 年 Green 项目,开发语言最初命名为 Oak ( 橡树 )
1994 年开发组意识到 Oak 非常适合于互联网
1996 年发布 JDK 1.0,约 8.3 万个网页应用 Java 技术来制作
1997 年发布 JDK 1.1,JavaOne 会议召开,创当时全球同类会议规模之最
1998 年发布 JDK 1.2,同年发布企业平台 J2EE
1999 年 Java 分成 J2SE、J2EE 和 J2ME,JSP/Servlet 技术诞生
2004 年发布里程碑式版本:JDK 1.5,为突出此版本的重要性,更名为 JDK 5.0
2005 年 J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
2009 年 Oracle 公司收购 SUN,交易价格 74 亿美元
2011 年发布 JDK 7.0
2014 年发布 JDK 8.0,是继 JDK 5.0 以来变化最大的版本
2017 年发布 JDK 9.0,最大限度实现模块化
2018 年 3 月发布 JDK 10.0,版本号也称为 18.3
2018 年 9 月发布 JDK 11.0,版本号也称为 18.9
2019 年 3 月 20 日 Java SE 12 发布。Java 12 是短期支持版本。
2019 年 9 月 23 日 Java SE 13 发布,此版本中添加了“文本块”,文本块是 一个多行字符串文字,避免对大多数转义序列的需要,以可预测的方式自动 格式化字符串,并在需要时让开发人员控制格式。
上一张从尚硅谷那里拿过来的一张java导图(没有水印):
6214a08c0d95452983db31f51e0d11e0.png

 尚硅谷

上一页:分页查询与集合分页查询与html基础知识​​​​​​​

下一页:请求方法+super+枚举+包装类+正则表达式+学习资料

个人总结:

最近几天比较emo,我们这里的疫情又加重了,学习上的压力也变大了,不知道什么时候考核,只能先准备着,算法虽然也有在写,但是有时候会因为比较忙,而忽略当天的算法,只能第二天补回来。

最近想明白了一些东西,心也微微沉了下来,平日里懒散惯了,忘记了以前的自己了,也想起来了以前的自己可没有现在这么蠢,以前多多少少心思还是比较缜密的,现在,自从进入大学之后,开始变得有些许懒散了,平日里也不经常每隔一段时间对自己过往的行为进行反思总结了,怎么说呢,有点像,过了很长一段时间之后再去看自己以前写的东西,会突然惊叹,以前的自己文笔怎么这么好,现在的文笔,怎么也写不出当时的了,现在的性格等一些东西就是这样吧。

仔细想想,自己以前很长一段时间里,多少有点盲目自大了。

说说最近的状态吧,之前,我有很多想要抓住的东西,可总是抓不住,慢慢的,也就习惯了,抓不住就抓不住了, 抓不住的东西,毕竟连伸手都是多余的,我也知道,自己有时候是真的三分钟热度,不得要浇灭自己的热情的时候,也比较果断,做的多了,有时候就会觉得自己有点太绝情了,想想都感觉有些许离谱。

换个话题,现在是晚上22:39,大多数人应该都睡了,家人们也都进入了梦乡。

还是想反思一下最近的情绪,情绪变得很平淡,有点冷漠,和别人聊天的时候,因为是线上聊天,线上我好像还是一个乐观的聊天方式,屏幕这边的我却大部分都是冷着一张脸,提不起兴趣来,感觉很多东西都是多余的,究根结底,还是上次竞选职位留下的问题,我深深的emo了。

生活还得继续,我好歹来到了这个世界上,虽然不清楚人死后会去哪里,但在活着的这段时间里,我都要格外珍惜,为自己的梦想,愿想努力,这样走到最后,我就能不愧对自己的说,我很满意。

讲了这么多,还是因为没有人听自己倾诉,所以在博客这里倾诉自己的不快,我自己就是一个挺好的聆听者,可是真正愿意聆听我的人却少之又少,真正理解我懂我的人又有多少,寥寥无几吧,白驹过隙,有一点从未改变,我还是那个追风的人,追求自由的灵魂,人的一生说长不长,能遇到一个知己难之又难。

说了这么多,最后的最后,还是收拾收拾自己的行囊,继续向前走,过去无可挽回,未来仍旧可期,以后的路,我都愿意认真走下去。清理内心的杂草,丢掉多余的东西,一身轻装,去迎接每天的太阳。

现在是早上7.47,想了很多,昨天晚上可以说是稍微放肆了一下,也是一个小测试,我在两个群里刷屏(刷屏容易打扰到别人,虽然别人都免打了),在最后一个群里,从僵尸讲到我的小说,我认真反思了一下,为什么会刷屏,因为焦虑,因为内心的情绪无从发泄,焦虑产生,用刷屏发泄,之后进行反思总结,对自己的了解更多了一些,心情emo焦虑的时候我会感觉到不安,我会刷屏,带着小心翼翼的刷屏,小心的发泄自己的不安,因为向来缺乏安全感,最后得出,刷屏改变不了什么,而且浪费时间,不如早点休息,出去散散步,舒缓心情。

最后发现,一切又都绕到了原点,在我现在的那个圈子里面,没有真正的所谓朋友,是真的了解我关心我,那里的每个人似乎最在意的都是自己,这些也都情有可原,的确不存在什么义务非要对没有亲缘关系的人示好,无条件的支持与关心,原本索取我想要的东西的方向都错了,在那个圈子里,我没有真正意义上的朋友,每个人都在意着自己,也没有义务要求“朋友”都对自己了解关心。

最关心自己的还是自己的家人,家人是无可代替的,朋友更多的都是过客,他们只是陪你走了一小段路,之后下站,可能再也不见。

我也知道无效社交,我也是一个喜欢试探的人,我喜欢从细节里面看人,最后试探出的结果是什么呢,还是自己自找没趣,也许会有人说,自己是什么人,身边的就是什么人,可是你怎么排除一些人是因为一些原因不得已在一起的。

以前向往的东西,现在得到之后才发现,也不过如此,也许是因为现在得到的不是我真正想要的,我也知道断舍离,在舍不得孩子时候我大部分会继续已有的状态,等弊大于利的时候或者自己腻的时候按着从前的惯例,我也不会留恋,有时候发现,自己有时候太过绝情,真的一点都不在意吗,怎么可能会不在意,但我本来就是一个自尊心强又孤傲的人,这些都不允许我去回头,自己做过的决定,我很少后悔,大部分时候,后悔解决不了问题,只能在现有的时间里将损失降到最小,我还有时间,我也还年轻,我未来会经历的还会很多,也许我会有朋友看到这篇博客,也许会没有,当然 很感谢你能看到这里,认真听我倾诉。

人生还是应该积极乐观的,我没有的东西我会去争取,朋友也择良木而栖,生活是面镜子,我也知道自己的性格,似乎对每个人都好,未来的路还很长,能陪着我走的人少之又少,所以,未来我会做好一个人走很长一段路的准备。

试探的越多,付出的希望越大,投入的感情越多,得到的失望也就越大,不如从一开始就把筹码娅在自己身上,精力放在自己身上,自己作为自己最大的筹码,赌输的可能性也会大大降低。

还有,对自己好点,熬夜真的很伤身体,别把注意力都放在别人身上,时刻保持清醒,沉默大部分时候都是正确的选择。

也许过一段时间我再看到这些,我会觉得幼稚可笑,但也都是题外话了,这是情绪的一次记录,多少还是有教育意义的。

就这样吧

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
树形搜索算法的Java实现需要设计一个二叉树的数据结构,并实现节点的插入和搜索操作。下面是一个基于递归实现的二叉树数据结构Java代码示例,包括插入和搜索操作。 ```java public class BinarySearchTree { private Node root; // 定义节点类 private class Node { int key; Node left; Node right; public Node(int key) { this.key = key; this.left = null; this.right = null; } } // 插入节点 public void insert(int key) { root = insert(root, key); } private Node insert(Node node, int key) { if (node == null) { return new Node(key); } if (key < node.key) { node.left = insert(node.left, key); } else if (key > node.key) { node.right = insert(node.right, key); } return node; } // 查找节点 public Node search(int key) { return search(root, key); } private Node search(Node node, int key) { if (node == null || node.key == key) { return node; } if (key < node.key) { return search(node.left, key); } else { return search(node.right, key); } } } ``` 在上述代码实现中,我们定义了一个Node类作为二叉树的节点,其中包含一个键值key,以及左右子节点的引用。在插入操作中,我们通过递归实现了节点的插入。在查找操作中,同样使用递归方式查找节点。这些操作的时间复杂度均为O(log n)。 对于二树形搜索算法的实现,我们需要在节点类中添加一个二编码的属性,用于存储每个节点的编码信息。在插入节点时,我们需要先将要插入的元素转换为二编码,然后按照字典序与二叉树中的节点行比较,从而找到对应的位置。在查找节点时,同样需要将要查找的元素转换为二编码,然后按照字典序与二叉树中的节点行比较,从而找到对应的节点。 下面是基于二树形搜索算法的Java代码实现示例: ```java public class BinarySearchTree { private Node root; // 定义节点类 private class Node { int key; String code; Node left; Node right; public Node(int key, String code) { this.key = key; this.code = code; this.left = null; this.right = null; } } // 插入节点 public void insert(int key) { String code = toBinaryString(key); root = insert(root, key, code); } private Node insert(Node node, int key, String code) { if (node == null) { return new Node(key, code); } if (code.compareTo(node.code) < 0) { node.left = insert(node.left, key, code); } else if (code.compareTo(node.code) > 0) { node.right = insert(node.right, key, code); } return node; } // 查找节点 public Node search(int key) { String code = toBinaryString(key); return search(root, key, code); } private Node search(Node node, int key, String code) { if (node == null || node.key == key) { return node; } if (code.compareTo(node.code) < 0) { return search(node.left, key, code); } else { return search(node.right, key, code); } } // 生成二编码 private String toBinaryString(int n) { StringBuilder sb = new StringBuilder(); while (n > 0) { sb.append(n % 2); n /= 2; } return sb.reverse().toString(); } } ``` 在上述代码实现中,我们修改了Node类,添加了一个code属性,用于存储每个节点的二编码信息。在插入节点时,我们先将要插入的元素转换为二编码,然后按照字典序与二叉树中的节点行比较,从而找到对应的位置。在查找节点时,同样需要将要查找的元素转换为二编码,然后按照字典序与二叉树中的节点行比较,从而找到对应的节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾喔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值