Java数据结构及算法实战
文章平均质量分 87
_waylau
大道至简! https://waylau.com/
展开
-
【Java 数据结构及算法实战】系列 017:HJ3 明明的随机数
明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。原创 2022-11-17 22:14:35 · 1042 阅读 · 1 评论 -
【Java 数据结构及算法实战】系列 016:HJ2 计算某字符出现次数
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写,字符串长度小于500。原创 2022-10-31 22:25:21 · 249 阅读 · 0 评论 -
【Java 数据结构及算法实战】系列 015:HJ1 字符串最后一个单词的长度
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)原创 2022-10-03 21:06:32 · 835 阅读 · 0 评论 -
【Java 数据结构及算法实战】系列 014:Java队列08——数组实现的双端队列ArrayDeque
ArrayDeque是基于数组实现的无界双端队列。ArrayDeque中的数组没有容量限制,它们能根据需要增长以支持使用。需要注意的是ArrayDeque不是线程安全的,因此在没有外部同步的情况下,它们不支持多线程并发访问。ArrayDeque用作栈时可能比Stack更快,用作队列时可能比LinkedList更快。ArrayDeque禁止插入空元素。ArrayDeque及其迭代器实现了Collection和Iterator接口的所有可选方法。ArrayDeque是Java Collectio原创 2022-05-17 22:27:13 · 722 阅读 · 0 评论 -
【Java 数据结构及算法实战】系列 013:Java队列07——双端队列Deque
双端队列(Deque),顾名思义是可以在队列的两端插入和移除元素的特殊队列。Java提供了java.util.Deque<E>接口以提供对双端队列的支持。该接口是Java Collections Framework的一个成员。1.Deque的方法这个java.util.Deque<E>接口接口定义了访问Deque两端元素的方法,包括插入、删除和检查元素的方法。这些方法都以两种形式存在:l一种是如果操作失败则抛出异常;l另一种是...原创 2022-05-09 21:55:58 · 288 阅读 · 0 评论 -
【Java数据结构及算法实战】系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue
PriorityBlockingQueue是基于数组实现的无界优先级阻塞队列。PriorityBlockingQueue与PriorityQueue类似,其中的元素按其自然顺序排序,或由队列构造时提供的比较器根据所使用的构造函数排序。优先级队列不允许空元素,依赖自然顺序的优先级队列也不允许插入不可比较的对象。相比于PriorityQueue而言,PriorityBlockingQueue一个最大的优势是线程安全的。PriorityBlockingQueue是Java Collections原创 2022-05-06 22:06:27 · 1118 阅读 · 0 评论 -
【Java数据结构及算法实战】系列011:数组实现的优先级队列PriorityQueue
PriorityQueue是基于数组实现的无界优先级队列。PriorityQueue中的元素按其自然顺序排序,或由队列构造时提供的比较器根据所使用的构造函数排序。优先级队列不允许空元素,依赖自然顺序的优先级队列也不允许插入不可比较的对象。PriorityQueue本质上就是一个最小堆存储结构数组,通过“极大优先级堆”实现的,即堆顶元素是优先级最大的元素。堆的操作,主要就是两个:siftUp(向上调整堆)和siftDown(向下调整堆)。PriorityQueue的队首原创 2022-05-02 09:18:55 · 755 阅读 · 0 评论 -
【Java数据结构及算法实战】系列010:Java队列04——链表实现的阻塞队列LinkedBlockingQueue
LinkedBlockingQueue是一种基于链表实现的可选边界的阻塞队列,该队列排序元素FIFO。队列的队首是在该队列上停留时间最长的元素,队列的队尾是在该队列上停留最短时间的元素。在队列尾部插入新的元素,队列检索操作在队列的头部获取元素。在大多数并发应用程序中,基于链表实现的队列通常具有比基于数组实现的队列更高的吞吐量,但性能上未必占优势。LinkedBlockingQueue在初始化时可以指定容量也可以不指定容量。当初始化LinkedBlockingQueue指定容量时,是有界队列;原创 2022-05-02 09:17:48 · 459 阅读 · 0 评论 -
【Java数据结构及算法实战】系列009:Java队列03——数组实现的阻塞队列ArrayBlockingQueue
顾名思义,ArrayBlockingQueue是基于数组实现的有界阻塞队列。该队列对元素进行FIFO排序。队列的首元素是在该队列中驻留时间最长的元素。队列的尾部是在该队列中停留时间最短的元素。新的元素被插入到队列的尾部,队列检索操作获取队列头部的元素。ArrayBlockingQueue是一个经典的“有界缓冲区(bounded buffer)”,其中内部包含了一个固定大小的数组,用于承载包含生产者插入的和消费者提取的元素。ArrayBlockingQueue的容量一旦创建,不可更改。试图将.原创 2022-04-27 21:59:13 · 1351 阅读 · 0 评论 -
【Java数据结构及算法实战】系列008:Java队列02——阻塞队列BlockingQueue
阻塞队列(BlockingQueue)是一种支持额外操作的队列,这两个附加的操作是:l在队列为空时,获取元素的线程会等待队列变为非空。l当队列满时,存储元素的线程会等待队列可用。Java提供了java.util.concurrent.BlockingQueue<E>接口以提供对阻塞队列的支持。该接口是Java Collections Framework的一个成员。1.BlockingQueue的方法BlockingQueue对不能立...原创 2022-04-25 19:22:56 · 1070 阅读 · 0 评论 -
【Java数据结构及算法实战】系列007:Java队列01——Queue概述
队列与栈类似,也是一种运算受限的线性表。队列则被限定在表尾进行插入、在表头进行删除,这种数据结构,实现了FIFO(First In First Out,先进先出)或者是LILO(Last In Last Out,后进后出)的方式工作。下图很形象将队列比作是实现生活中的排队。排在队列前面的总是会最先得到处理,而排在队列后面的总是最后得到处理。1. 队列的基本概念在对队列有了基本的认识之后,我们再来看下队列的基本概念。进..原创 2022-04-22 19:51:03 · 611 阅读 · 0 评论 -
【Java数据结构及算法实战】系列006:算法复杂度等级及其分析
本节是《Java数据结构及算法实战》系列的第6节,主要介绍算法复杂度等级及其分析的方法。在前一节,我们介绍了程序的性能,也介绍了评估性能的方式。那么,我们是否就能测算出算法需要运行的时间呢?在上一节,我们了解算法复杂度的度量规则,接下来我们将学会如何对各个具体算法的复杂度进行分析。按照渐进复杂度的思想,可以将算法的复杂度按照高低划分为若干典型的级别。这种分类方法,也被称为函数的界或者函数的阶。1. 常数的时间复杂度O(1)首先来看这样一个“取非极端元素”问题:给定整数子集S,+∞ > |S|原创 2022-01-12 23:35:13 · 575 阅读 · 0 评论 -
【Java数据结构及算法实战】系列005:渐近记法
本节是《Java数据结构及算法实战》系列的第5节,主要介绍分析算法和数据结构的重要工具——渐近记法。在前一节,我们介绍了程序的性能,也介绍了评估性能的方式。那么,我们是否就能测算出算法需要运行的时间呢?1.3.1 大O标记法直接回答上述问题并非易事,原因在于,即使是同一算法,针对不同的输入运行的时间并不相同。以排序问题为例,输入序列的规模、组成和次序都不是确定的,这些因素都会影响到排序算法的运行时间。在所有这些因素中,输入的规模是最重要的一个。假设我们要对学生按照成绩排序,那么显然,当学生的规模很少时原创 2021-12-27 22:32:05 · 381 阅读 · 0 评论 -
【Java数据结构及算法实战】系列004:程序性能的两种确定方式
本节是《Java数据结构及算法实战》系列的第4节,主要介绍程确定序性能的两种方式。可以采用两种方法来确定一个程序的性能,一种是实验的方法,另外一种是分析的方法。1. 采用实验的方式来确定程序的性能在实际的工作中,采用实验的方式来测试程序的性能通常就是指性能测试(Performance Testing)。性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测原创 2021-12-20 23:52:57 · 461 阅读 · 0 评论 -
【Java数据结构及算法实战】系列002:算法的四种描述方式
本节是《Java数据结构及算法实战》系列的第2节,主要介绍描述算法的常用的4种方式。要定义一个算法,我们可以用自然语言、流程图、伪代码的方式描述解决某个问题的过程或是编写一段程序来实现这个过程。比如,在前面所举的“学生信息管理系统”例子中,我们希望实现添加用户、删除用户、查询用户三个算法。1. 自然语言描述算法可以采用自然语言的方式来描述添加用户、删除用户、查询用户三个算法:添加用户:将用户信息添加到系统中。如果已经添加了过该用户的信息,则提示用户。否则将用户信息添加到系统中,并给出提示。删除用原创 2021-12-15 00:01:12 · 3792 阅读 · 0 评论 -
【Java数据结构及算法实战】系列003:程序性能的两种表示方式
本节是《Java数据结构及算法实战》系列的第3节,主要介绍程序性能的两种表示方式。评价一个程序好坏的指标非常多,比如易用性、稳定性、可维护性等等,但一个最为重要的评价指标是性能。性能是其他评价指标的基础。比如,在Web网站响应时间方面,业界的评判标准是主样的:在2秒之内给客户响应被用户认为是“非常有吸引力”的用户体验。在5秒之内给客户响应被用户认为是“比较不错”的用户体验。在10秒之内给客户响应被用户认为是“糟糕”的用户体验。如果超过10秒还没有得到响应,那么大多数用户会认为这次请求是失败的。原创 2021-12-17 00:02:48 · 1067 阅读 · 0 评论 -
【Java数据结构及算法实战】系列001:聊下什么是数据结构和算法
本节是《Java数据结构及算法实战》系列的第1节,主要介绍数据结构和算法概念。对于接触过计算机基础知识的读者而言,对于下面这个公式应该不会陌生:算法 + 数据结构 = 程序提出这一公式并以此作为其一本专著书名[1]的瑞士计算机科学家Niklaus Wirth于1984年获得了图灵奖。程序(Program)是由数据结构(Data Structure)和算法(Algorithm)组成,这意味着的程序的好快是直接由程序所采用的数据结构和算法决定的。什么是数据结构数据结构可以简单理解为是承载数据元素原创 2021-12-09 23:38:17 · 270 阅读 · 0 评论