- 博客(65)
- 收藏
- 关注
原创 算法(六)计数排序
计数排序是利用数组下标来确定元素的正确位置的。假定数组有10个整数,取值范围是0~10,可以根据这有限的范围,建立一个长度为11的数组。数组下标从0到10,元素初始值全为0。假定给定无序数组数据为:9,1,2,7,8,1,3,6,5,3创建累计数组,然后遍历无序数组,每一个数按照其值对应累计数组索引下标进行对号入座,每出现一次该值,累计数据该索引下标的值就加1,最终就会得到下面的累计数组:然后遍历累计数组,就可以得到正确的顺序::1、1、2、3、3、5、6、7、8、9。
2024-05-30 21:26:34
241
2
原创 算法(五)堆排序
堆是具有特殊性质的完全二叉树,堆主要分为大顶堆和小顶堆。堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。
2024-05-30 17:36:57
532
原创 算法(四)快速排序
快速排序(quick sort)也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。具体算法:快速排序每轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成两个部分,使用的思路是分治法。基准元素(privot):在分治过程中,以基准元素为中心,把其它元素移动到它的左右边。
2024-05-30 13:54:26
335
原创 算法(三)冒泡排序
冒泡排序(bubble sort)是一种基础的交换排序,该算法中每个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组地一侧移动。具体算法:冒泡排序是将相邻地元素两两比较,当一个元素大于右侧相邻元素时,交换它们地位置,当一个元素小于或等于右侧相邻元素时,位置不变。
2024-05-30 11:43:01
254
原创 算法(二)二分查找
二分查找(binary search)算法,也叫折半算法。二分查找是针对有序的数据集合的查找办法,如果是无序的数据结合就使用遍历。二分查找之所以快速,是因为它再匹配不成功的时候,每次都能排除剩余元素中一半的元素,因此包含目标元素的有效范围就会收缩非常快。时间复杂度: T(n) = O(logn)
2024-05-30 01:01:49
257
原创 Java实现数据结构---图
图(Graph)一种比线性表和树更加复杂的结构。在图形结构中,顶点(vertex)之间的关系是任意的,途中任意两个顶点之间都有可能关联。
2024-05-29 18:40:33
1428
原创 Java实现数据结构---数组
数组是(Array)是的变量所组成的集合,数组中的每一个变量为称为。数组是最简单、最常用的数据结构。数组下标从开始。
2024-05-28 12:05:52
343
原创 MySQL架构原理(MySQL体系架构、MySQL运行机制、MySQL存储引擎)
一、MySQL体系架构MySQL Server架构大致可以分为:网络连接层、服务层、存储引擎层和系统文件层。网络连接层客户端连接器(Client Connectors)提供与MySQL服务器建立连接的支持。目前主流服务器编程技术,例如:Java、C、Python,它们均是通过各自API与MySQL建立连接服务层服务层为MySQL Server的核心,主要包括系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。连接池负责存储和管理客户端与数据库的连接,一个线程管理一
2022-01-14 23:04:02
600
原创 Java HashMap源码分析(JDK8)
1. HashMap是实现了Map接口的哈希表,HashMap实现了Map的所有操作并且key和value均允许为NULL。 2. HashMap与HashTable相比:前者是非线程安全的,后者是线程安全的。 3. 有两个参数会影响HashMap实例的性能: (1) 初始化capacity的大小 capacity是指:哈希表拥有的bucket的数量.而初始化的capacity就是哈希表创建时的capacity. (2) 负载因子的大小. 负载因子是指:它其
2019-12-25 17:23:51
364
1
原创 IDEA启动Tomcat报错:Address localhost:1099 is already in use
本文为IDEA启动Tomcat报错:Address localhost:1099 is already in use, Java端口被占用情况解决方法.
2019-12-25 10:29:48
348
原创 Java实现数据结构---哈希表
1. 哈希表(Hash Table)也称为散列表,是一种根据关键字值(key - value)而直接访问的数据结构。它的底层是基于数组实现,通过对键值对的key进行Hash求值(哈希化)算出对应的数组下标索引,因此不需要遍历整个底层数组,插入删除效率均很快,被广泛应用。
2019-10-24 14:38:01
804
1
原创 Java实现数据结构---234树
一个节点最多只有两个子节点的树称为二叉树,一个节点最多拥有N(大于等于3)个子节点的树称为N叉树,N叉树相对于二叉树而言,存储相等数量的数据,N叉树因为同一层存放的数据变多,相应树的高度就变小,查询也就更快。234树是N叉树的一种,它主要具有以下特点: 1. 一个节点最多可以存储3个数据项。 2. 一个节点(非叶节点)最多拥有4个子节点。 3. 数据项个数与子节点数量关系为:子节点数量 = 数据项个数 + 1。
2019-07-18 17:30:42
2928
1
原创 Java实现数据结构---红黑树
红黑树是一种自平衡树,它也是一颗二叉树。它和AVL树比较类似,在插入、删除过程中不平衡的话,也会进行旋转操作,但是并没有AVL树旋转得那么频繁,这也是红黑树被广泛应用的原因。红黑树主要有以下五个特性: 1. 节点的颜色为红色或者黑色; 2. 根节点为黑色; 3. 所有的叶子节点为黑色,叶子是NIL节点,也就是NULL节点; 4. 如果一个节点是红色的吗,那么他的左右子节点必须为黑色; 5. 从根节点到任意叶子节点的所有简单路径都包含数量相同的黑色节点。
2019-07-06 13:40:33
582
1
原创 Java实现数据结构---AVL树
二叉搜索树在树较为平衡状态下,可以有效的提高数据的插入、删除、查询效率,但是不可避免二叉搜索树随着数据的插入、删除有可能会变为链表结构(利用有序的数据源依次添加),极大的降低效率,所以二叉搜索树最好时时刻刻都在相对平衡状态,也就是AVL的由来。AVL树也称为平衡二叉树,AVL树是一种特殊的二叉搜索树,特点是:树种任意节点的左右子树的最大高度差为1。
2019-07-02 16:20:25
546
2
原创 Java实现数据结构---二叉树
树是一种由边连接着结点的数据结构,数据模型上的树可以看做是一棵倒挂的树木,有一个主干,下面是枝干、树叶。树的常用语: 根:树的最顶端节点称为根,一棵树只有一个根。且根到任意一节点有且只有一条路径。父节点:每个节点(排除根)都恰好有一条边向上连接另一节点,上面这个节点就是下面节点的父节点。例如:A是B和C的父节点,B是D和E节点的父节点。子节点:每个节点都有可能存在一条或者多条边向下连接其他节点,下面节点就是上面节点的子节点。
2019-06-21 15:14:58
580
1
原创 Java实现数据结构---队列
队列是一种抽象的数据结构,是一种只能在一端插入,在另一端获取的有序线性表。队列中第一个插入的元素也是第一个获取的元素,队列的数据到达次序符合“先进先出”的思想。
2019-06-20 16:09:28
248
1
原创 Java实现数据结构---链表
链表(Linked list)是一种在物理上不连续、非顺序的数据结构,由若干个节点(Node)组成。链表中元素的逻辑顺序是通过链表中的指针链接次序实现的。
2019-06-19 10:44:20
218
1
原创 Java ThreadGroup源码分析(JDK8)
线程组可以看做是存放线程的容器,ThreadGroup与Thread可以看做是集合与元素的对应关系,在ThreadGroup可以对组内的线程进行操作,比如destory() ,interrupt() ,以及设置线程组的最大优先级,从而限制新建线程的优先级。
2019-06-18 14:50:35
484
1
原创 Java Thread源码分析(JDK8)
操作系统在运行一个程序时,会为其创建一个进程,在一个进程里可以创建多个线程,线程作为操作系统调度的最小单元,一个线程包含:各自的计数器、堆栈以及局部变量(能够访问共享的内存)。
2019-06-18 11:51:22
623
1
原创 Java LinkedList源码分析(JDK8)
LinkedList是Java语言常用的集合,LinkedList的底层是有一个双向双端链表实现的,因此LinkedList继承了链表的特性:插入删除效率很高(时间复杂度O(1)),查询效率较低(时间复杂度O(N)),不需要给出初始容量,一定程度上节约了系统资源。
2019-06-14 17:15:45
146
1
原创 Java HashSet源码分析(JDK8)
HashSet的底层是由HashMap实现的,用了HashMap的key来存储元素,value为默认的对象,因HashMap的key是不能够重复的所以也就造成了HashSet集合元素的不可重复性。
2019-04-16 13:45:27
1618
2
原创 Java ArrayList源码分析(JDK8)
ArrayList是Java语言中常用的集合,他的底层由数组实现,因此继承了数据数据结构的优点:查询效率高(时间复杂度O(1)),插入删除慢(时间复杂度O(N))。
2019-04-16 13:42:43
214
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅