数据结构
cuichen97
冲冲冲
展开
-
红黑树
为什么红黑树要旋转和变色?使得红黑树成为一个相对平衡的二叉树,也就能提高红黑树的工作效率。特征:1.节点是红色或黑色。2.根节点是黑色。3.每个叶子节点都是黑色的空节点(NIL节点)。4.每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。...原创 2019-11-19 22:15:04 · 78 阅读 · 0 评论 -
ConcurrentHashMap底层原理
ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?一.get操作的源码(没有加任何锁)首先计算hash值,定位到该table索引位置,如果是首节点符合就返回如果遇到扩容的时候,会调用标志正在扩容节点ForwardingNode的find方法...原创 2019-11-07 19:20:50 · 155 阅读 · 0 评论 -
A*算法解决8数码问题
解决方法点此链接转载 2019-11-07 13:53:16 · 487 阅读 · 0 评论 -
HashMap的底层原理
一.特点:HashMap的初始容量为16,填充因子为0.75.扩展容量是当前容量的2倍二.HashMap的哈希算法:1.得到key值的hashcode2.对hashcode值进行异或运算3.对异或的结果和初始容量(即数组大小)-1 做&运算static final int hash(Object key) { int h; return (...原创 2019-11-05 19:03:15 · 475 阅读 · 0 评论 -
ArrayList源码及原理
一、ArrayList的数据结构ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。二、ArrayList的线程安全性对ArrayList进行添加元素的操作的时候是分两个步骤进行的:第一步:先在object[size]的位置上存放需要添加的元素;第二步:将size的值增加1。由于这个过程在多线程的环境下是...原创 2019-11-04 18:45:20 · 112 阅读 · 0 评论 -
Java内存分区
Java虚拟机所管理的内存将包括以下几个运行时数据区域:线程共享区:方法区、堆线程私有区:虚拟机栈、本地方法栈、程序计数器一丶1.程序计数器:是一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。java多线程就是通过对线程的轮流切换并分配处理器的执行时间的方式来实现的,在任意时刻,一个处理器都只会执行某一个线程中的指令。所以每条线程为了切换后能恢复到正确的执行位置,每条...原创 2019-07-07 09:48:26 · 613 阅读 · 0 评论 -
List自定义排序
原创 2019-10-12 09:14:44 · 105 阅读 · 0 评论 -
用一个for循环,打印9*9乘法表
public class Test { //使用一个循环来打印9*9乘法表 public static void main(String[] args) { int num = 1;//从1开始打印 int row=1;//打印第一行 for (int i = 0; i < 37; i++) { if (num<row) { System.out.pri...原创 2019-09-26 09:05:18 · 1140 阅读 · 0 评论 -
HashMap的排序方法
因为Map中LinkedhashMap是有序的,所以将HashMap转化为LinkedHashMap可以实现排序public Static Map<String,String> sortHashMap(Map<String,String> map){ Map<String,String> sortedMap = new LinkedHashMap<...原创 2019-09-17 19:33:45 · 9611 阅读 · 0 评论 -
用数组的方法实现数组去重
用数组的方法实现数组去重package cn.qf.day16.test;import java.util.Arrays;/** * @author CC * 数组去重 */public class Test { public static void main(String[] args) { int[] aryNum={0,12,12,34,2,45,3,2,34,5,...原创 2019-07-22 20:14:33 · 227 阅读 · 0 评论 -
动态规划算法
一.动态规划的定义1.简单定义:动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。2.基本思想:动态规划算法的基本思想:是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解...转载 2019-07-12 08:05:13 · 1094 阅读 · 0 评论 -
冒泡排序、选择排序、插入排序
排序1.冒泡排序:(面试)每一次比较相邻的两个元素---->相邻比较根据需要决定是否进行交还---->合规交换每一轮交换完毕之后,总能把最大值或者最小值放到最后,下一轮比较的时候,之前的最值不再参与比较.剩下的元素按规则比较,以此类推…需要的轮数 = 元素的个数-1每一轮中比较的次数 = 待比较的元素个数-1代码:import java.util.Arrays;/*...原创 2019-07-11 18:48:51 · 136 阅读 · 0 评论 -
快速排序
快速排序快速排序是原地排序算法,排序不稳定import java.util.Arrays;/** * @author CC * 快速排序算法 */public class QuickSort { public static void main(String[] args) { int[] arr = {10,7,2,5,9,88,6,3,1,8}; sort(arr, ...原创 2019-07-13 16:27:04 · 79 阅读 · 0 评论 -
二分法查找
二分法查找:二分法检索(binary search)又称折半检索,二分法检索的基本思想是:设数组中的元素从小到大有序地存放在数组(array)中,首先将给定值key与数组中间位置上元素的关键码(key)比较,如果相等,则检索成功;否则,若key小,则在数组前半部分中继续进行二分法检索;若key大,则在数组后半部分中继续进行二分法检索。这样,经过一次比较就缩小一半的检索区间,如此进行下...原创 2019-07-13 15:57:29 · 170 阅读 · 0 评论