9 _否极泰来_

尚未进行身份认证

我要认证

人是有命运的,文化属性和作用在不同人身上的自然规律决定了命和运,改变客观条件,才能改变命运。你是你自己的救世主!——遥远的救世主

等级
TA的排名 1w+

数据结构和算法(九)递归

1. 数据结构和算法(九)递归1.1 什么是递归  在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。通俗来说,递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。1.2 递归的三大要素这个函数的功能他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不...

2020-03-18 01:33:02

数据结构和算法(八)中缀表达式转逆波兰表达式

1. 数据结构和算法(八)中缀表达式转逆波兰表达式1.1 四则混合运算加法、减法、乘法、除法,统称为四则混合运算。其中,加法和减法叫做第一级运算;乘法和除法叫做第二级运算。表达式(算式):如:1+((2+3)*4)-5=16运算顺序:同级运算时,从左到右依次计算;两级运算时,先算乘除,后算加减。有括号时,先算括号里面的,再算括号外面的;有多层括号时,先算小括号里的,再算中括...

2020-02-21 22:14:58

数据结构和算法(七)栈的设计与实现

1. 数据结构和算法(七)栈的设计与实现1.1 什么是栈  栈是一种抽象数据结构,是对现实世界对象的模拟。比如,自助餐厅中的一叠盘子,新盘子放在这一叠盘子的最上面,取得时候也是从最上面取。将其抽象出来就是栈,这是最合适的抽象方式。栈的特点:栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进...

2020-02-21 22:13:47

数据结构和算法(六)Java实现跳表

1. 数据结构和算法(六)Java实现跳表1.1 什么是跳表(Skip List)  跳表确实是一种性能比较优秀的动态数据结构,跳表(skip list) 对标的是平衡树(AVL Tree),是一种 插入/删除/搜索 都是 O(log n) 的数据结构。它最大的优势是原理简单、容易实现、方便扩展、效率更高。因此在一些热门的项目里用来替代平衡树,如 redis, leveldb 等。跳表的数据结...

2020-02-19 23:10:00

数据结构和算法(五)Java实现双向链表

1. 数据结构和算法(五)Java实现双向链表1.1 什么是双向链表  双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。value域–存放结点值的数据域prev域–存放结点的直接前继的地址(位置)的指针域(链域)next域–存放结点...

2020-02-17 17:23:10

数据结构和算法(四)Java实现环形链表

1. 数据结构和算法(四)Java实现环形链表1.1 约瑟夫问题约瑟夫问题:公元66年,约瑟夫不情愿地参与领导了犹太同胞反抗罗马统治的起义,后来起义失败,他和一些宁死不降的起义者被困于一个山洞之中。罗马将军韦斯巴芗(Vespasian)派人来劝降,他主张投降,其余的人不答应,并以死相逼。最后,约瑟夫提议,与其死在自己的手上,不如死在彼此的手上。因此他便将游戏规则告知众人:N个人围成一圈,从第一...

2020-02-17 17:21:46

数据结构和算法(三)图解单向链表反转

1. 数据结构和算法(三)图解单向链表反转  所谓的单链表反转,就是把每个节点的指针域由原来的指向下一个节点变为指向其前一个节点。一直觉得反转链表实现代码不是很好理解,今天用画图的方式去理解它。1.1 需求分析反转链表需求:输入:[HBase,Redis,Kafka]输出:[Kafka,Redis,HBase]分析:存在链表 HBase → Redis → Kafk...

2020-02-17 17:20:24

数据结构和算法(二)Java实现单向链表

1. 数据结构和算法(二)Java实现单向链表1.1 什么是单向链表  单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;链表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向NULL的指针...

2020-02-17 17:19:25

数据结构和算法(一)Java实现循环队列

1. 数据结构和算法(一)Java实现循环队列1.1 什么是循环队列  循环队列:具有队头指针(front)和队尾指针(rear),指示队列元素所在的位置,避免删除元素时移动大量元素。队列也是一种线性表,只不过它是操作受限的线性表,只能在两端操作,先进先出(First In First Out,FIFO)。循环队列特性:只能队尾插入元素、在队头删除元素。先进先出(First In ...

2020-02-17 17:18:18

JAVA多线程(二十八)Java多线程之SynchronousQueue容器

1.JAVA多线程(二十八)Java多线程之SynchronousQueue容器1.1 什么是SynchronousQueue  Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。不像ArrayBlockingQueue或LinkedListBlocking...

2020-02-11 18:50:01

JAVA多线程(二十七)Java多线程之LinkedBlockingQueue容器

1.JAVA多线程(二十七)Java多线程之LinkedBlockingQueue容器1.1 什么是LinkedBlockingQueue  LinkedBlockingQueue 底层基于单向链表实现的阻塞队列,可以当做无界队列也可以当做有界队列来使用,同样满足 FIFO 的特性,与 ArrayBlockingQueue 相比起来具有更高的吞吐量,为了防止 LinkedBlockingQue...

2020-02-11 18:48:46

JAVA多线程(二十六)Java多线程之PriorityBlockingQueue容器

1.JAVA多线程(二十六)Java多线程之PriorityBlockingQueue容器1.1 什么是PriorityBlockingQueue  PriorityBlockingQueue 是一个支持优先级的无界阻塞队列。默认情况下元素采用自然顺序进行排序,也可以通过自定义类实现 compareTo() 方法来指定元素排序规则,或者初始化时通过构造器参数 Comparator 来指定排序规...

2020-02-11 18:47:55

JAVA多线程(二十五)Java多线程之ArrayBlockingQueue容器

1.JAVA多线程(二十五)Java多线程之ArrayBlockingQueue容器1.1 什么是BlockingQueue  阻塞队列(BlockingQueue)被广泛使用在“生产者-消费者”问题中,其原因是 BlockingQueue 提供了可阻塞的插入和移除的方法。当队列容器已满,生产者线程会被阻塞,直到队列未满;当队列容器为空时,消费者线程会被阻塞,直至队列非空时为止。Blocki...

2020-02-11 18:46:51

JAVA多线程(二十四)Java多线程之CompletableFuture类

1.JAVA多线程(二十四)Java多线程之CompletableFuture类1.1 什么是Future  Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel方法停止任务的执行。package com.yuanxw.chapter24;import ja...

2020-02-06 19:40:15

JAVA多线程(二十三)Java多线程之ScheduledThreadPoolExecutor定时执行任务线程池

1.JAVA多线程(二十三)Java多线程之ScheduledThreadPoolExecutor定时执行任务线程池1.1 定时执行任务线程池ScheduledThreadPoolExecutor   ScheduledThreadPoolExecutor是一个使用线程池执行定时任务的类,相较于Java中提供的另一个执行定时任务的类Timer,其主要有如下两个优点:使用多线程执行任务,不用...

2020-02-03 21:39:05

JAVA多线程(二十二)Java多线程之WorkStealingPool工作窃取线程池

1.JAVA多线程(二十二)Java多线程之WorkStealingPool工作窃取线程池1.1 工作窃取线程池WorkStealingPool   在Java 8中,引入了一种新型的线程池,作为newWorkStealingPool()来补充现有的线程池。WorkStealingPool线程池,来维持相应的并行级别,它会通过工作窃取的方式,使得多核的 CPU 不会闲置,总会有活着的线程让 C...

2020-02-03 21:37:30

JAVA多线程(二十一)Java多线程之SingleThreadExecutor单线程化线程池

1.JAVA多线程(二十一)Java多线程之SingleThreadExecutor单线程化线程池1.1 单线程化线程池SingleThreadExecutor   SingleThreadExecutor 是只有一个线程的线程池。通过源代码查看SingleThreadExecutor实现: /** * Creates an Executor that uses a sing...

2020-02-01 18:56:59

JAVA多线程(二十)Java多线程之FixedThreadPool可重用固定线程数的线程池

1.JAVA多线程(二十)Java多线程之FixedThreadPool可重用固定线程数的线程池1.1 可重用固定线程数的线程池FixedThreadPool   可重用固定线程数的线程池FixedThreadPool特点是:只有核心线程,不会被回收、线程数量固定、任务队列无大小限制(超出的线程任务会在队列中等待),通过源代码查看FixedThreadPool实现: /** ...

2020-02-01 18:56:29

JAVA多线程(十九)Java多线程之CachedThreadPool可缓存线程池

1.JAVA多线程(十九)Java多线程之CachedThreadPool可缓存线程池1.1 可缓存线程池CachedThreadPool   可缓存线程池CachedThreadPool是一个根据需要创建新线程的线程池。通过源代码查看CachedThreadPool实现: /** * Creates a thread pool that creates new threa...

2020-02-01 18:55:46

JAVA多线程(十八)Java多线程之Executor框架&ThreadPoolExecutor类

1.JAVA多线程(十八)Java多线程之Executor框架&ThreadPoolExecutor类   Executor 框架是 Java5 之后引进的,在 Java 5 之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。this 逃逸是指在构...

2020-01-31 18:31:14

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。