自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 手撕HashMap JDK1.7

在1.7中HashMap的存储结构:数组 + 链表数组的特点:存储空间有限且连续,扩容较麻烦,需要先new一个新数组,然后将旧数组的数据全部转移到新数组;查找较快,可直接通过索引得到对应的数据;在数组大小足够的情况下,若在非最后一个位置插入,也需要new新数组,然后转移旧数组数据,再插入链表的特点:存储空间非连续,插入较为方便,可直接改变next指针;但是查找较慢,若需要查找的数据在链表的最后一个,则需要从头遍历到最后一个节点HashMap综合了数组和链表的特点,通过Hash算法,将key值映射到固定

2021-10-14 16:09:42 141

原创 类加载机制学习笔记

类加载机制Java程序运行,首先会将编写的Java代码转换成字节码,然后加载到内存中,最后被JVM解释执行。本文讲介绍类的加载过程虚拟机加载对应的class文件,会经过5个流程一、加载就是将class文件加载到虚拟机的内存中,在这个阶段,需要完成三件事情:1.通过类的全限定名来获取这个类的二进制字节流——class文件2.将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构3.在内存中生成这个类对应的class对象,作为各种数据的访问入口有8种情况会要求立即进行对应类的初始化,而加

2021-09-06 21:03:52 135

原创 设计模式——单例模式

一、定义确保一个类只有一个实例,并且提供一个全局变量来访问到这个唯一的实例二、实现方式1.饿汉式public class EagerSingleton{ private static final EagerSingleton instance = new EagerSingleton(); //防止在其他类中new出一个对象,可以给构造器加上private访问权限 private EagerSingleton(){ } //向外暴露一个方法,来得到这个类的唯一的对象

2021-08-21 20:24:39 127

原创 Google File System学习笔记

1.什么是GFSGFS(Google File System)是 Google 公司开发的一款分布式文件系统2.GFS能解决什么?新技术的出现,其首要目的还是要解决先前的不足部分。在文章的摘要部分,我注意到了这几个词:大规模数据、可伸缩、廉价硬件设备、高性能,1.组件失效看成是一种常态,系统要能持续监控自身的状态,并且有能力迅速的侦测、冗余并恢复失效的组件2.能存储一定数量的大文件3.工作负载为大容量连续读、小容量随机读以及追加式的连续写4.支持高效且原子的文件追加操作5.高性能的稳定网络带

2021-08-05 16:31:29 188

原创 Java中的static关键字

在编写代码的时候,经常看到static关键字的,那就是main方法了,至于为什么main方法需要用static来修饰,相信你看了下文之后会明白要想使用一个类的方法或者访问类的公开的变量,通常来说是先new一个对象,然后通过对象去调用或者访问变量,而使用static关键字,可以在没有创建对象的时候来使用对应的方法或者变量,也就是这样public class test { String name = "小明"; public void hello(){ System.out.

2021-08-02 09:18:42 81

原创 哈夫曼编码和解码

在前一文中,介绍了根据权值进行哈夫曼树的构建(https://blog.csdn.net/m0_51384638/article/details/116278540)。本文,将对传入的字符串进行编码,得出一个哈夫曼编码表,并根据编码表解码,得到原来的数据。要实现对字符串进行哈夫曼编码和解码,我认为需要解决的问题如下:1如何统计频率.每一个字符如何与它的权值建立一一对应的关系。2.搭建哈夫曼树之后,如何得到每一个字符的哈夫曼编码。3.根据哈夫曼编码表,如何解码得到原来的字符串。现在,问题依次来解决

2021-05-05 18:58:56 5774 2

原创 初识哈夫曼树

目前市面上的压缩软件,都是在美国数学家哈夫曼发明的哈夫曼编码的基础上进行延伸的(站在巨人的肩膀上)。也就是说,哈夫曼编码的出现,能把文件的大小进行压缩,压缩之后,还要能复原,就需要根据一张已有的编码表进行。本文仅先介绍哈夫曼树的基础知识及搭建,当然还会在接下来写有关哈夫曼编码、解码的文章。一、哈夫曼压缩的原理引入一个生活中的例子,在对一个班级的学生成绩划分等级的时候,小于60为E,[60,70)为D,[70,80)为C,[80,90)为B,[90,100]为A。如果对于一个学生的成绩,都从60开始进行等

2021-04-30 08:59:16 229

原创 数据库连接池

与数据库建立连接是很耗费资源和时间的,所以可以提前建立好一些连接,将它们放入到一个容器中,比如数组,等待需要使用的时候取出,用完再放回。这样一来就解决了许多问题,比如:只有一个连接,此时正在执行查询的动作,但是需要查询返回的内容有很多,需要一段时间才能结束,但又需要执行插入的动作,那在查询没有结束的时候,插入是执行不了的,引入连接池之后,一个动作使用一条连接,互相就不会受到很大的影响了。先把连接池的类构建好public ConnPool{ private ArrayList<Connection

2021-03-31 22:51:50 68

原创 初识JDBC

JDBC是Java语言中用来规范客户端程序如何来访问数据的应用程序接口,也就是实现了能让Java程序连接到数据库并进行一系列操作,如:增删查改。在开始之前,需要从各数据库官网下载驱动程序,然后导入到开发环境中。先试想,要想对一个东西有所操作,是不是得先连接上这个东西,换句话说就是,与这个东西产生某种持久的联系,而这个东西就是数据库。这其实和网络通信中的Socket和ServerSocket的建立思路是一样的。一、获得连接对象public Connection getConnection() throw

2021-03-28 21:13:25 90 1

原创 二叉树的三种遍历

阅读本文前应对树的结构有所了解,起码得知道根节点,左子树和右子树。其次就是,本文采用的对二叉树进行遍历时用的是递归的方法。遍历:沿着特定的路径,对每一个节点只进行一次访问。然后因对根节点的访问顺序的不同,分为前、中、后三种遍历方式一、前序遍历...

2021-03-05 21:48:27 1404 2

原创 ServerSocket和Socket的实际应用

基于上一篇文章,现在来实现一个简单的聊天室,就是服务器和客户机之间能够进行文字交流。想一下,既然是聊天室,那么就会有很多人,服务器如何去处理很多客户的连接,将在接下来的代码中进行讲解因为客户机不牵扯到等待连接的问题,就先从客户端上手吧一、客户端客户端由两个类构成,既然是聊天室,单独用一个类去创建窗口,另外一个类处理网络通信通信类public class SocketDemo(){ //这一部分的代码在上一篇文章中有讲解过,另外,把 public boolean isConnected(){

2021-01-31 18:42:50 135

原创 通过ServerSocket和Socket实现网络通信

在java中,要让程序之间建立起通信的通道,可以通过ServerSocket和Socket这两个类中的方法实现。在通信中,有两个角色:服务器和客户机。等着被连接的叫做服务器,主动去连接的叫做客户机,在其他方面,两者都相同,也就是说,在两者建立好之后,后面的代码就可以仿照着写,因为最终是要实现数据的传输嘛,客户机能做的,服务器当然也要能做。下面就从建立服务器和客户机,结合代码进行介绍一、服务器服务器的建立使用ServerSocket这个类,通过查看api文档,可以看到这个类有4种构造方法。1⃣️Se

2021-01-26 22:34:18 977 1

原创 数组和链表的区别

数组和链表的对比java中,数组应该是最基本的数据结构,那么,对于这个数据结构来说,我们可以从以下几个方法去探讨。public class void main(String[] args){System.out.println(“helloworld”);for(){system.out.println}}...

2020-12-17 18:25:23 4452

原创 线程安全

一、线程安全在介绍线程安全之前,先说一下线程的运行过程。线程主要经历:创建、就绪、运行、阻塞、死亡。1.创建new出一个线程的对象时候,就已经分配了一块内存给这个对象2.就绪调用线程对象的start方法的时候,线程就进入就绪状态,待cpu调度后,就可以进入运行状态3.运行执行线程类中的run方法4.阻塞在程序执行的过程中,会由于cpu的调度出现此线程不能在继续运行的状态,比如:有一个更高级别的任务需要线程,cpu就会把低级任务的线程夺回去,就进入阻塞,待cpu分配新的可供使用的线程5.死

2020-12-15 22:22:58 79

原创 java中的多线程

一、概念一个程序可以同时执行多个任务,一个任务叫做一个线程;线程也可以理解为执行的流程创建线程先让一个类去继承Thread类,在类中重写run方法,在run方法中加入需要执行的代码。创建好线程类之后,new一个线程的对象,然后用start方法去启动线程。需要注意的是,启动线程并不是使用run方法,如果使用run方法,就相当于执行了一个普通的方法。public class Test extends Thread { private String name; //构造器,传入名字 public T

2020-11-25 21:13:41 74

原创 Java图形界面的重绘

当我们用Graphics画出一些图形之后,一旦改变整个窗体的大小或者最小化之后,原本画出的图形就消失不见,这就需要对之前所画出的图形进行重绘,而重绘就需要重写paint方法。我们首先来想,为什么计算机能够对图形进行重绘?是不是只有将图形数据保存下来,才能重绘。由此就引入数组的概念。一、数组数组能够顺序存储相同类型的很多个数据,当然,也希望能够对数组中的数据进行访问,其方法为:数组名【索引】。若一个数组中有N个值,则它的索引为0到N-1。1.数组的声明和创建在声明数组时,需要给出数组中所包含的数据类

2020-11-13 20:53:51 593

原创 Java构造函数

一、什么是构造函数看了很多文章,发现对构造函数都有这么一句描述,“java构造函数,也叫构造方法,是java中一种特殊的函数。”构造函数能再一开始就给类中的一些属性初始化值,使得后续的工作量相对减小。在生活中,有很多例子和构造函数相同,人出生后就有了性别。所以说,使用构造函数后,它里面的方法就立刻被执行了。二、特点1.不添加返回值类型,那如果写了返回值类型,就变成了一个普通的方法2.函数名必须与类名相同3.不能写return语句,因为没有返回值三、作用(具体的作用在后文的代码中看)1.new一

2020-10-28 16:42:34 636

原创 Java中的继承

一、含义继承是子类(派生类)继承父类(基类)的属性和方法,就是说继承之后,子类有父类的属性和方法。举个简单的例子:员工和经理都是一个公司的雇员,

2020-10-12 21:03:58 89

原创 Java入门(1)

一、 类描述对象的一个抽象概念,囊括了具有相似属性和方法的事物。//定义一个学生类public class Student{ //学生的一些属性 public String name;//学生的姓名 public int score;//学生的成绩 //学生的行为 public void study(){ //此处写方法体 }}二、 对象1.对象是类的实例(某一具体的事物),由类构造对象的过程叫创建类的实例(类名 变量名 = new 类名),每一个对象都存在着有别于其他对象的属性

2020-10-08 21:07:19 236

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除