
Java
文章平均质量分 76
宅猫coding
但行好事,莫问前程。
展开
-
排序算法合集及其应用举例
1. 排序算法一表总览排序算法最好时间复杂度最坏时间复杂度平均时间复杂的空间复杂度排序方式稳定性快速排序O(nlogn)O(n\log n)O(nlogn)O(n2)O(n^2)O(n2)O(nlogn)O(n\log n)O(nlogn)O(logn)O(\log n)O(logn)交换不稳定计数排序O(k+n)O(k + n)O(k+n)O(k+n)O(k + n)O(k+n)O(k+n)O(k + n)O(k+n)O(k+n)O(k +原创 2021-01-24 15:40:41 · 1380 阅读 · 4 评论 -
快速排序的“四种”写法
1. 序言:鲁迅先生笔下孔乙己的茴香豆四种写法的故事让大家常引得大家哄堂大笑,诚然我们不需要掌握茴香豆的四种写法,也无需掌握hello world的各种写法,但作为一个技术人员,还是需要懂得一题多解甚至一解多样,锤炼技术才是我们端好这碗饭的不二法门。快速排序是一种最为常用的排序方法,其主要思想“分治”更是一种必须掌握的关键算法。快速排序代码简单,但其边界处理和关键字处理是一项比较麻烦的内容,今天来梳理一下快速排序的多种写法,以便于各位找到一种最容易理解和接受的写法。2. 四种写法2.1 先移后判换两原创 2021-01-16 17:54:10 · 1990 阅读 · 0 评论 -
数据结构:哈希表原理与HashTable、HashMap、HashSet
哈希表原理简析;HashMap源码详细分析;HashMap和HashTable的对比原创 2020-02-21 00:02:35 · 663 阅读 · 0 评论 -
数据结构之二叉搜索树(BST)与Java实现
二叉搜索树概念;插入,删除,查找,寻找最大(最小),寻找前驱(后继)等相关操作全文参考自《算法导论》原创 2020-01-05 17:09:51 · 291 阅读 · 0 评论 -
数据结构之图:单源最短路径算法详解与Java实现(Dijkstra算法与Bellman-Ford算法)
以通俗易懂的方式(讨论+图解+代码)的形式叙述有向图最经典的最短路径算法:Dijkstra算法和Bellman-Ford算法(另外有SPFA算法)原创 2020-01-03 16:01:55 · 468 阅读 · 0 评论 -
数据结构之图:最小生成树算法详解与Java实现(Kruskal算法与Prim算法)
核心思想+图解+代码的形式讲解最小生成树的经典算法:Kruskal算法(克鲁斯卡尔算法)和Prim算法(普里姆算法)原创 2019-12-13 20:52:46 · 410 阅读 · 0 评论 -
数据结构之并查集:按秩合并与路径压缩优化
并查集1.并查集描述一些有NNN个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。为了快速解决这些问题,便有了并查集的概念。并查集维护了一个不相交的动态集的集合S1,S2,⋯ ,Sn{S_1,S_2,\cdots,S_n}S1,S2,⋯,Sn,每个集合将有一个"首领"来标识该集...原创 2019-11-15 17:54:35 · 2237 阅读 · 0 评论 -
数据结构之图:深度优先与广度优先搜索算法Java实现
一、图的表示1.图的两种表示1.1 邻接表对于图G=(V,E)G=(V,E)G=(V,E)来说,邻接表表示由一个包含∣V∣|V|∣V∣条链表的数组AAA构成,对于每一个结点u∈Vu\in Vu∈V,邻接链表A[u]A[u]A[u]包含所有与结点uuu之间有边相连的结点。如下图所示:如上图,图GGG是一个无向图,则对于边(u,v)(u,v)(u,v)来说,结点vvv将出现在链表A[u]A...原创 2019-11-10 17:56:12 · 424 阅读 · 0 评论 -
数据结构之二叉树与Java实现(非递归遍历详解)
一、二叉树相关知识1.树1.1 树的概念树是由n(n≥0)n(n \geq 0)n(n≥0)个结点构成的集合,每个结点至多有一个前驱结点(根结点没有前驱结点),每个结点有若干个后继结点,结点满足条件:n>1n \gt 1n>1时,除根结点以外的所有结点被分为若干个不相交的集合S1,S2,⋯ ,SkS_1,S_2,\cdots,S_kS1,S2,⋯,Sk,其中每个集合又符合...原创 2019-11-04 20:26:09 · 442 阅读 · 0 评论 -
数据结构之堆与Java实现
一、堆1.堆的概念堆时一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的一个元素 。除了树的最底层外,该树是完全充满的,底层不满时从左往右填充。2.堆的性质2.1 堆的高度把堆看作一颗树,则堆中某个结点的高度就是该结点到叶结点最长简单路径上的边的数目。如此一来,堆的高度就是堆顶到叶子节点的最长简单路径上的边的数量。也即lg(N)lg(N)lg(N),之后我们可以发...原创 2019-10-24 14:50:51 · 221 阅读 · 0 评论 -
数据结构之队列与Java中的Queue,PriorityQueue
一、队列1.队列简介2.队列结构及其特点3.顺序队列的假溢出问题4.队列基本功能实现5.性能分析6.优先级队列二、Queue 与 PriorityQueue1.Queue接口Queue是Java中关于队列的最顶级的接口,所有与队列有关类或接口均与Queue有直接或间接的关系,它继承自Collection类。除去Collection类中的方法,它还提供入队,出队,查看队头元素的方...原创 2019-10-19 17:57:35 · 267 阅读 · 0 评论 -
数据结构之栈与Java中的Stack、Deque
栈1.栈的定义2.栈类型、结构及其特点3.顺序栈的基本功能实现4.链式栈的基本功能实现Stack1.Stack介绍2.Stack部分源码分析3.为什么说Stack是不优良的设计Deque1.使用Deque代替Stack2.ArrayDeque部分源码分析3.再谈LinkedList总结...原创 2019-09-22 21:19:39 · 1268 阅读 · 2 评论 -
数据结构之链表与Java中的LinkedList
链表1.链表定义链表是线性表的一种。线性表的定义为:一种可以在任意位置进行插入和删除数据元素操作的,由n个相同类型数据元素a0,a1,a2,⋯ ,an−1a_{0},a_{1},a_{2},\cdots,a_{n-1}a0,a1,a2,⋯,an−1组成的线性结构。其数据元素满足除第一个元素和最后一个元素外,每个元素只有一个直接前驱和直接后继,第一个元素没有前驱元素,最后一个元素没有后...原创 2019-09-11 11:57:18 · 323 阅读 · 1 评论 -
数据结构之顺序表与Java中的ArrayList、Vector
顺序表1.什么是顺序表顺序表是线性表的一种。线性表的定义为:一种可以在任意位置进行插入和删除数据元素操作的,由n个相同类型数据元素a0,a1,a2,⋯ ,an−1a_{0},a_{1},a_{2},\cdots,a_{n-1}a0,a1,a2,⋯,an−1组成的线性结构。其数据元素满足除第一个元素和最后一个元素外,每个元素只有一个直接前驱和直接后继,第一个元素没有前驱元素,最后一个元...原创 2019-09-10 00:06:58 · 352 阅读 · 0 评论 -
Java集合框架总览
Java集合Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类。接口:代表集合的抽象数据类型。例如 Collection、List、Set、Queue、Map 等,这些接口以不同的方式操作集合...原创 2019-09-04 19:59:00 · 123 阅读 · 0 评论 -
Java输入输出流
相关概念流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。流的源端和目的端可简单地看成是数据的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。流的划分:按照流向...原创 2019-08-05 21:23:00 · 105 阅读 · 0 评论 -
Java线程类
基础知识线程状态根据Thread.State类中的描述,Java中线程有六种状态:NEW,RUNNABLE,WAITING,TERMINATED,BLOCKED。就绪状态(NEW):当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。运行状态(RUNNABLE):如果就绪状态的线程获取 CPU 资源,就可以执行...原创 2019-08-09 21:23:00 · 283 阅读 · 0 评论