java语法
随性而活的风
这个作者很懒,什么都没留下…
展开
-
HashMap高阶笔记讲解
HashMap高阶笔记讲解1.HashMap集合简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突**(两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同)*原创 2020-09-14 17:12:18 · 522 阅读 · 0 评论 -
java实现ArrayList和LinkedList[包含接口List和抽象类AbstractList]
java实现ArrayList和LinkedList[包含接口List和抽象类AbstractList]图解首先我们需要定义一个MyList的接口,将ArrayList和LinkedList共同的方法进行定义package com.bingym.list.mylist;public interface MyList<E> { //自定义List接口:内部包含了List的抽象方法 int size();//获取集合的大小 boolean isEmpty();/原创 2020-09-11 15:29:14 · 434 阅读 · 0 评论 -
双向链表实现(java)
双向链表实现(java)java代码实现package com.bingym.linkedlist.doublelist;public class DoubleLinkedList { //双向链表:既存在一个节点的后向节点next域,同时也存在一个节点的前向节点pre //定义属性:头结点head,不包含任何信息,只是作为一个头结点 private Node head = new Node(0,""); public Node getHead() {原创 2020-09-11 14:59:06 · 138 阅读 · 0 评论 -
单向链表实现(java代码)
单向链表实现以及常见的面试题收录(java代码)Java代码package com.bingym.linkedlist;import java.util.Stack;public class SingleLinkedListByOrder { //实现单向链表功能:链表的添加add(可以按照编号index进行插入),链表内容的打印 //内部需要包含一个节点类:内部类/外部类都可以 //定义单向链表的属性 private Node head =new Node(原创 2020-09-11 14:56:19 · 494 阅读 · 0 评论 -
ArrayList简单实现API
ArrayList简单实现APIArrayList简单介绍ArrayList底层是使用动态数组生成的,若在创建ArrayList集合时,未指定其容量,则在添加元素时,会进行扩容处理,第一次会将空的集合扩容为10,后面若添加元素仍然超过其最大容量,则将其每次都扩容为原来长度的1.5倍;下面自定义完成集合ArrayList的创建,其中包含简单的API:空参构造方法添加元素的方法: add(E e)获取集合长度的方法: getSize()根据集合的索引获取元素的方法: get(int index)原创 2020-09-10 11:28:32 · 159 阅读 · 1 评论 -
二叉排序树(BinarySortTree)的添加,删除功能实现(java代码实现)
二叉排序树(BinarySortTree)的添加,删除功能实现(java代码)介绍二叉排序树:BST(Binary Sort Tree):要求该树的任何一个非叶子结点的左子结点的值小于当前结点的值,右子结点的值大于当前结点的值注意:若是存在相同值的情况,则将该结点放在当前结点的左子结点或者右子结点都可以删除结点的思路分析分为三种情况:第一种情况:删除的是叶子结点第二种情况:删除的是只有一颗子树的结点第三种情况:删除的是有两颗子树的结点下面代码中会做详细的步骤分析package com.b原创 2020-08-31 09:45:14 · 167 阅读 · 1 评论 -
赫夫曼编码和解码(java代码实现)
赫夫曼编码和解码(java代码实现)package com.bingym.tree.huffman;import java.util.*;public class HuffmanCode { /* * 赫夫曼编码:Huffman Coding * 是赫夫曼树在电讯通信中的经典的应用之一 * 广泛应用于数据文件的压缩:其压缩率通常在20~90%之间 * 赫夫曼码是可变字长编码(VLC)的一种 * 赫夫曼编码的原理和实现步骤: * 1.我们根据需原创 2020-08-29 21:16:39 · 261 阅读 · 0 评论 -
赫夫曼树的创建(java代码)
赫夫曼树的创建(java代码)赫夫曼树:对于一个二叉树来说,如果它的带权路径长度(WPL:weighted path length):即所有叶子结点的的带权长度之和最小也就是说权值越大的叶子结点距离根节点距离越近的最优二叉树—即称为赫夫曼树其中:1.路径:在一棵树中,从一个结点往下可以达到的孩子或者孙子结点之间的通路,称之为路径2.路径长度:通路中分支的数目称为路径长度,若规定根节点的层数为1,则从根节点到第L层的路径长度为:L - 13.结点的的权及带权路径长度:3.1结点的某一赋值原创 2020-08-29 18:50:22 · 197 阅读 · 0 评论 -
堆排序(java代码实现)
堆排序(java代码实现)堆排序:此处以升序排序时间复杂度为O(nlogn)堆:是一种满足一下条件的完全二叉树1.每个节点的值都大于或者等于其左右子节点的值称之为大顶堆;2.每个节点的值都小于或者等于其左右子节点的值称之为小顶堆;3.对于节点的左右子节点的大小关系没有做任何要求;基本思想:1)将待排序的序列构造成一个大顶堆----大顶堆利用前面的顺序存储二叉树的数组结构存储2)此时,序列的的最大值即为堆顶的根节点3)将其与末尾的元素进行交换,此时,末尾就是最大值4)然后再将n-1个元原创 2020-08-28 19:22:48 · 415 阅读 · 0 评论 -
顺序存储二叉树(java代码实现)
顺序存储二叉树(java代码实现)将二叉树(一般为完全二叉树)的所有节点以数组的形式进行存放,在遍历数组时,我们仍然可以以二叉树的前中后次序进行遍历;顺序存储二叉树的特点1.通常情况下我们只考虑完全二叉树2.第n个元素的左子节点为: 2 * n + 13.第n个元素的右子节点为: 2 * n + 24.第n个元素的父节点为:(n - 1) / 2注意:其中的n为二叉树中的第几个元素(从0来时计数)图解:代码:package com.bingym.tree;public class原创 2020-08-28 11:51:24 · 687 阅读 · 0 评论 -
线索化二叉树及其遍历(java代码实现)
线索化二叉树及其遍历(java代码实现)线索化二叉树介绍当一个二叉树存在多个叶子结点,这下叶子节点的左右子树没有利用上====>我们考虑将其充分利用,让各个节点可以指向自己的前后节点1)n个节点的二叉树链表中含有(n+1)个空指针域2)利用二叉树链表中的空指针域,存放该节点在某种遍历次序下的前驱节点和后继节点3)这种加上了线索的二叉树链表称为线索链表,相应的二叉树称为线索二叉树(ThreadedBinaryTree)4)根据线索化二叉树的遍历次序的不同:可分为前序线索二叉树,中序线索二叉树原创 2020-08-28 11:38:22 · 668 阅读 · 0 评论 -
二叉树的常用功能实现(java)
二叉树的常用功能实现二叉树的功能1.二叉树前中后序遍历代码实现2.二叉树前中后序查找指定节点代码实现3.二叉树删除指定节点代码实现package com.bingym.tree;public class BinaryTreeDemo { /* * 二叉树的前中后序遍历 * 分析:首先我们需要创建一个二叉树(即需要root节点即可) * 前序遍历: * 先输出当前节点(初始即为root节点) * 如果当前节点的左子节点不为空,则递归继续进行前序遍历原创 2020-08-27 16:28:25 · 264 阅读 · 0 评论 -
哈希表(java代码实现)
哈希表(java代码实现)哈希表:又称为散列表(Hash Tab):是根据关键码(key value)而直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度;其中映射函数也称为散列函数:用来存放记录的数组叫做散列表简单理解:哈希表就是一个数组+加上链表的存储结构(数据结构)代码实现:package com.bingym.hash;import java.util.Scanner;public class HashTabDemo { /*原创 2020-08-27 10:42:40 · 625 阅读 · 0 评论 -
JVM学习笔记汇总:结合尚硅谷宋红康老师视频教程及PPT
JVM学习笔记汇总:结合尚硅谷宋红康老师视频教程及PPT第一章:JVM虚拟机的介绍1.1虚拟机的分类虚拟机通常分为两类:系统虚拟机和程序虚机。其中,系统虚拟机是指完全对物理计算机的仿真,而程序虚拟机是指专门为执行单个计算机程序而设计的的。我们的java虚拟机就是典型的程序虚拟机。1.2Java虚拟机的整体架构1.3 Java代码的执行流程1.4 Java的架构模型java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说,两种架构的区原创 2020-09-09 14:15:32 · 3110 阅读 · 2 评论 -
jvm常见的面试问题汇总,持续更新中...
jvm内存结构常见的面试问题汇总章节1.jvm内存结构部分面试题1:jvm内存分区以及各个区的作用和功能回答:jvm内存分区分为五个部分:堆区,java虚拟机栈区,本地方法栈,方法区以及程序计数器;内存结构图如下所示:其中:程序计数器: 用来存储指向下一条指令的地址,也就是即将执行的指令代码的,并由执行引擎来读取下一条指令虚拟机栈: 主管java程序的运行,它保存的是方法的局部变量,部分结果,并参与方法的调用和返回。可以这样说,栈解决的是程序的运行问题,即程序如何运行,或者说如何处理数据。原创 2020-07-01 13:14:45 · 273 阅读 · 0 评论