单向循环链表-约瑟夫问题_wiselee/-编程思维

单向环形列表 应用场景:约瑟夫环问题 思路: 创建第一个节点,让first指向该节点,并形成环状 后面当我们每创建一个新的节点,就把该节点,加入到已有的环形链表中即可 遍历环形链表 先让一个辅助变量,指向frist节点 然后通过一个while循环遍历该环形链表即可 curBoy.next == first结束 代码实现 添加和遍历单向环形链表 package com.wisele

栈实现计算器的操作_wiselee/-编程思维

栈实现计算器的操作 使用一个栈完成计算一个表达式的结果 使用两个栈:数栈(存放数) 符号栈(存放运算符) 思路 通过一个index值,来遍历我们的表达式 如果我们发现一个数字,就直接加入到树栈中 如果发现扫描到的是一个符号,就分如下情况来解决, 如果发现当前的符号栈就直接入栈 如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,则需要从数栈中pop出两个数,

数据结构与算法-稀疏数组_wiselee/-编程思维

稀疏数组 当一个数组中大部分元素为0,或者为同一个数值时,可以使用稀疏数组来保存该数组 稀疏数组的处理方法是: ​ 1.记录数组一共有几行几列,有多少不同的值 ​ 2.把具有不同值的元素行列以及值记录在一个小规模的数组中,从而缩小程序的规模 应用实例 棋盘的一个案例 一般稀疏数组的列是固定的三个,分别是row col val 三列分别代表着原来的二维数组所在的行 列 以及对应

队列和循环队列_wiselee/-编程思维

队列 队列首先是一个有序列表,即可以用数组或是链表来实现 遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的要后取出 示意图: 数组模拟队列 队列本身就是有序列表,若使用数组的结构来存储队列的数据,则使用maxsize表示该队列的最大容量 因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front和rear分别记录队列的前后端,front随着队列的输出而改变,r

java锁的逻辑(结合对象头和objectmonitor)_大兴神-编程思维

我们都知道在Java编程中多线程的同步使用synchronized关键字来标识,那么这个关键字在JVM底层到底是如何实现的呢。 我们先来思考一下如果我们自己实现的一个锁该怎么做呢: 首先肯定要有个标记记录对象是否已经上锁,执行同步代码之前判断这个标志,如果对象已经上锁线程就阻塞等待锁的释放。 其次要有一个结构体来维护这些等待中的线程,锁释放后来遍历这些线程让他们去抢锁。 第一点Java使用对

开启string去重xx:+usestringdeduplication的利与弊_kelelipeng-编程思维

开启String去重XX:+UseStringDeduplication的利与弊   原文在这里: 开启String去重XX:+UseStringDeduplication的利与弊首先来看下由JDK开发组研究得出的一组有趣的统计数据: 1.java应用内存里面的字符串占比大概是25%。 2.java应用内存里面的字符串有13.5%是重复的。 3.字符串的平均长度是45。 由于

窗口滑动算法_wiselee/-编程思维

窗口滑动算法 简介 滑动窗口算法思想是非常重要的一种思想,可以用来解决数组,字符串的子元素问题。它可以将嵌套循环的问题,转换为单层循环问题,降低时间复杂度,提高效率。 滑动窗口的思想非常简单,它将子数组(子字符串)理解成一个滑动的窗口,然后将这个窗口在数组上滑动,在窗口滑动的过程中,左边会出一个元素,右边会进一个元素,然后只需要计算当前窗口内的元素值即可。 可用滑动窗口思想解决的问题,一般有如下

java集合_wiselee/-编程思维

Java集合分类 数据结构 一:集合框架的概述 1.集合、数组都是对多个数据进行存储的结构 简称java容器 说明:此时的存储,主要还是内存层面的存储,不涉及持久化存储(数据库、硬盘等等) 2.数组在存储多个数据方面的特点: 》一旦初始化以后,长度就确定了 》指明数组的数据类型 例如:string[] int [] 一旦定义好其数组的类型、其元素的类型也就指定了 2.2数组在存储多个数据方面

java序列化_wiselee/-编程思维

java序列化和反序列化 如果我们需要持久化Java对象比如将Java对象保存在文件中,或者在网络传输Java对象,这些场景都需要用到序列化。 序列化: 将数据结构或对象转换成二进制字节流的过程 反序列化:将在序列化过程中所生成的二进制字节流的过程转换成数据结构或者对象的过程 实际开发中有哪些用到序列化和反序列化的场景? 1 在进行网络开发时,进行数据的交换前,需要先将这个entry类实现可序列

hashmap基本使用方法_wiselee/-编程思维

HashMap Map集合基于 键(key)/值(value)映射。每个键最多只能映射一个值。键可以是任何引用数据类型的值,不可重复;值可以是任何引用数据类型的值,可以重复;键值对存放无序。 HashMap常用方法 put/get 方法 1.put(K key, V value) 将键(key)/值(value)映射存放到Map集合中。 2.get(Object key) 返回指定键所映射的值,

letcode-学习-数组去重_wiselee/-编程思维

数组去重 问题描述: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个

springboot starter缘起_大兴神-编程思维

SpringBoot通过SpringBoot Starter零配置自动加载第三方模块,只需要引入模块的jar包不需要任何配置就可以启用模块,遵循约定大于配置的思想。 那么如何编写一个SpringBoot Starter呢?我们需要考虑如下几个问题: 如何让SpringBoot发现我们编写的模块? 如何让模块读取SpringBoot的配置文件? 如果用户没有在配置文件中配置必要的配置项,如何默认

javassist _gk0d-编程思维

前言 动态编程这个概念是相对于静态编程而言的,两者的区别简而言之,在静态编程中,类型检查是在编译时完成的,而动态编程中类型检查是在运行时完成的。所谓动态编程就是绕过编译过程在运行时进行操作的技术 在反射,动态代理中都能感受到动态编程的影子 Javassist是一个开源的分析、编辑和创建Java字节码的类库,Java 字节码存储在称为类文件的二进制文件中。每个类文件包含一个 Java 类或接口。

servlet_gk0d-编程思维

前言 在Java开发中,部署jsp网站的时候通常都是将文件打包成war包,然后再进行上传,上传后会自动进行解压,那么我们来看看war包的结构 WebContent (站点根目录) |---META-INF (META-INF文件夹) | |---MANIFEST.MF (MANIFEST.MF配置清单文件) |---WEB-INF (WEB-

反射_gk0d-编程思维

1.简介 Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。由此反射被称为框架的灵魂, 最终操作的是字节码文件(可以读和修改字节码文件),java反射机制的相关类在java.lang.reflect.*包下 2.反射工作原理 当我们编写完一个Java项目之后,每个java文件都会被编译成一个.cla

java语言的优点_城北有个混子-编程思维

  首先, Java语言是一种纯粹的面向对象的编程语言。这样就决定了Java语言更能直接客观地反映现实生活中的对象,因此Java语言更适合大型的复杂系统开发。  其次, Java语言是一种平台无关的语言。 Java语言是一种解释型语言,它的执行需要解释器的参与,因此Java语言实现了跨平台机制,也就是说同一套代码源程序,只要具备特定平台的解释器,就可以在该平台上运行。正是由于Java语言的平台无