博客园 - GrayWind
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=80502
2018-08-25T09:06:14Z
GrayWind
https://www.cnblogs.com/graywind/
feed.cnblogs.com
https://www.cnblogs.com/graywind/p/9484577.html
Java LinkedHashMap类源码解析 - GrayWind
LinkedHashMap继承了HashMap,他在HashMap的基础上增加了一个双向链表的结构,链表默认维持key插入的顺序,重复的key值插入不会改变顺序,适用于使用者需要返回一个顺序相同的map对象的情况。还可以生成access-order顺序的版本,按照最近访问顺序来存储,刚被访问的结点处
2018-08-15T16:06:00Z
2018-08-15T16:06:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】LinkedHashMap继承了HashMap,他在HashMap的基础上增加了一个双向链表的结构,链表默认维持key插入的顺序,重复的key值插入不会改变顺序,适用于使用者需要返回一个顺序相同的map对象的情况。还可以生成access-order顺序的版本,按照最近访问顺序来存储,刚被访问的结点处 <a href="https://www.cnblogs.com/graywind/p/9484577.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9478296.html
Java Hashtable类源码解析 - GrayWind
老生常谈的问题——Hashtable和HashMap有什么区别 大家一般都能说出几条,比如Hashtable是线程安全的,不支持null作为key和value值等等。那么,要仔细了解这个问题还是直接从Hashtable的源码入手。 先列一下我找到的区别: 首先从最上方的注释中可以看到Hashtabl
2018-08-14T15:12:00Z
2018-08-14T15:12:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】老生常谈的问题——Hashtable和HashMap有什么区别 大家一般都能说出几条,比如Hashtable是线程安全的,不支持null作为key和value值等等。那么,要仔细了解这个问题还是直接从Hashtable的源码入手。 先列一下我找到的区别: 首先从最上方的注释中可以看到Hashtabl <a href="https://www.cnblogs.com/graywind/p/9478296.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9471756.html
Java HashMap类源码解析(续)-TreeNode - GrayWind
由于TreeNode本身是红黑树的实现,所以在分析TreeNode的之前我还是摸了一篇算法导论里红黑树的读书笔记:算法导论——红黑树,从伪代码行数也可以看出完整的红黑树的插入和删除操作代码是很长的,下面源码分析部分的行数就更多了,所以所谓手写红黑树画个图分析下逻辑还行,手写代码估计要写死(滑稽) T
2018-08-13T15:49:00Z
2018-08-13T15:49:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】由于TreeNode本身是红黑树的实现,所以在分析TreeNode的之前我还是摸了一篇算法导论里红黑树的读书笔记:算法导论——红黑树,从伪代码行数也可以看出完整的红黑树的插入和删除操作代码是很长的,下面源码分析部分的行数就更多了,所以所谓手写红黑树画个图分析下逻辑还行,手写代码估计要写死(滑稽) T <a href="https://www.cnblogs.com/graywind/p/9471756.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9468965.html
算法导论——红黑树 - GrayWind
红黑树是一棵二叉搜索树,每个结点上增加了一个属性来存储颜色是红色还是黑色,红黑树可以确保没有一条路径会比其他路径长出2倍,所以近似可以认为是平衡的。 每个结点包含5个属性:color, key, left, right, p。如果一个结点没有子结点或者父结点,则该结点的相应指针属性为NIL,这些NI
2018-08-13T08:19:00Z
2018-08-13T08:19:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】红黑树是一棵二叉搜索树,每个结点上增加了一个属性来存储颜色是红色还是黑色,红黑树可以确保没有一条路径会比其他路径长出2倍,所以近似可以认为是平衡的。 每个结点包含5个属性:color, key, left, right, p。如果一个结点没有子结点或者父结点,则该结点的相应指针属性为NIL,这些NI <a href="https://www.cnblogs.com/graywind/p/9468965.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9462948.html
算法导论——单元最短路径 - GrayWind
单源最短路径问题是指,给定一个图G=(V,E),希望找到从给定源结点s到每个节点v的最短路径。单源最短路径问题可以用来解决很多最短路径的变体。 单目的地最短路径问题:找到从每个结点v到给定目的地结点t的最短路径。将图的每条边翻转,这个问题可以转换为单源最短路径问题。 单结点对最短路径问题:找到从给定
2018-08-12T06:29:00Z
2018-08-12T06:29:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】单源最短路径问题是指,给定一个图G=(V,E),希望找到从给定源结点s到每个节点v的最短路径。单源最短路径问题可以用来解决很多最短路径的变体。 单目的地最短路径问题:找到从每个结点v到给定目的地结点t的最短路径。将图的每条边翻转,这个问题可以转换为单源最短路径问题。 单结点对最短路径问题:找到从给定 <a href="https://www.cnblogs.com/graywind/p/9462948.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9457521.html
Java HashMap类源码解析 - GrayWind
作为重要的常用集合,HashMap主要是提供键值对的存取,通过key值可以快速找到对应的value值。Hash表是通过提前设定好的规则计算一个元素的hash值来找到他在数组中的存储位置进行快速定位,假设有一个大小为10的数组,可以设定简单的计算规则为元素转为int后mod 10,由此元素的hash值
2018-08-11T12:34:00Z
2018-08-11T12:34:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】作为重要的常用集合,HashMap主要是提供键值对的存取,通过key值可以快速找到对应的value值。Hash表是通过提前设定好的规则计算一个元素的hash值来找到他在数组中的存储位置进行快速定位,假设有一个大小为10的数组,可以设定简单的计算规则为元素转为int后mod 10,由此元素的hash值 <a href="https://www.cnblogs.com/graywind/p/9457521.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9438586.html
算法导论——最小生成树 - GrayWind
对于一个连通图来说,我们可以去掉其中一些边依然保持其连通的性质,在这些图中存在一个或多个图,他们的路径总和是最小的,这样的图必然是树。因为,如果说图中存在环,则去掉环的一条边依然可以保证连通性,这与总路径和最小是矛盾的。这样的图被称为最下生成树。城市间铺设电路就可以利用最小生成树来进行规划。 如图所
2018-08-07T10:11:00Z
2018-08-07T10:11:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】对于一个连通图来说,我们可以去掉其中一些边依然保持其连通的性质,在这些图中存在一个或多个图,他们的路径总和是最小的,这样的图必然是树。因为,如果说图中存在环,则去掉环的一条边依然可以保证连通性,这与总路径和最小是矛盾的。这样的图被称为最下生成树。城市间铺设电路就可以利用最小生成树来进行规划。 如图所 <a href="https://www.cnblogs.com/graywind/p/9438586.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9435088.html
Java LinkedList类源码解析 - GrayWind
LinkedList底层为双向链表同样继承了AbstractSequentialList<E>,跟ArrayList的数组相比读取效率低,不支持随机读取,碎片化空间利用率高,平均随机插入效率相对高。同时可以用来实现queue。属性有: transient int size = 0;list大小 tr
2018-08-07T01:23:00Z
2018-08-07T01:23:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】LinkedList底层为双向链表同样继承了AbstractSequentialList<E>,跟ArrayList的数组相比读取效率低,不支持随机读取,碎片化空间利用率高,平均随机插入效率相对高。同时可以用来实现queue。属性有: transient int size = 0;list大小 tr <a href="https://www.cnblogs.com/graywind/p/9435088.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9430692.html
算法导论——基本的图算法 - GrayWind
对于图G=(V,E),V代表点,E代表边。图有两种标准的表示方法:邻接矩阵法和邻接链表法。 邻接链表法适合表示边的条数少的稀疏图,可以节约存储空间。对于有向图G来说,边(u,v)一定会出现在链表Adj[u]中,因此,所有链表的长度之和一定等于|E|。对于无向图来说,边(u,v)会同时出现在Adj[u
2018-08-06T07:54:00Z
2018-08-06T07:54:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】对于图G=(V,E),V代表点,E代表边。图有两种标准的表示方法:邻接矩阵法和邻接链表法。 邻接链表法适合表示边的条数少的稀疏图,可以节约存储空间。对于有向图G来说,边(u,v)一定会出现在链表Adj[u]中,因此,所有链表的长度之和一定等于|E|。对于无向图来说,边(u,v)会同时出现在Adj[u <a href="https://www.cnblogs.com/graywind/p/9430692.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9424634.html
Java ArrayList类源码解析 - GrayWind
ArrayList是最常用的集合类,底层是由数组实现的 首先可以看到,有两个static final对象数组,也就是被线程间共享的,EMPTY_ELEMENTDATA是非default大小的空集合,原因是要辨别第一次添加元素时应该扩展的大小。 private static final Object[
2018-08-05T02:12:00Z
2018-08-05T02:12:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】ArrayList是最常用的集合类,底层是由数组实现的 首先可以看到,有两个static final对象数组,也就是被线程间共享的,EMPTY_ELEMENTDATA是非default大小的空集合,原因是要辨别第一次添加元素时应该扩展的大小。 private static final Object[ <a href="https://www.cnblogs.com/graywind/p/9424634.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9419586.html
算法导论——用于不相交集合的数据结构 - GrayWind
不相交集合的操作 一些应用涉及将n个不同元素分成一组不相交的集合,常进行两种操作:寻找包含制定元素的唯一集合以及合并两个集合。操作进行以下定于: MAKE-SET(x)建立一个新的集合,仅含有x UNION(x,y)将包含x和y的两个集合合并成一个新的集合,删除原本的集合 FIND-SET(x)返回
2018-08-04T11:03:00Z
2018-08-04T11:03:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】不相交集合的操作 一些应用涉及将n个不同元素分成一组不相交的集合,常进行两种操作:寻找包含制定元素的唯一集合以及合并两个集合。操作进行以下定于: MAKE-SET(x)建立一个新的集合,仅含有x UNION(x,y)将包含x和y的两个集合合并成一个新的集合,删除原本的集合 FIND-SET(x)返回 <a href="https://www.cnblogs.com/graywind/p/9419586.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9409547.html
算法导论——斐波那契堆 - GrayWind
斐波那契堆是具有最小堆序的有根树的集合,也就是集合中的每棵树都具有父结点的关键字小于或等于子结点的关键字。 对于每一个结点x,主要有以下属性: 名称 说明 记作 关键字 结点存储的值 x.key 父结点 结点的父亲 x.p 左兄弟 结点的左兄弟 x.left 右兄弟 结点的右兄弟 x.right 孩
2018-08-02T12:15:00Z
2018-08-02T12:15:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】斐波那契堆是具有最小堆序的有根树的集合,也就是集合中的每棵树都具有父结点的关键字小于或等于子结点的关键字。 对于每一个结点x,主要有以下属性: 名称 说明 记作 关键字 结点存储的值 x.key 父结点 结点的父亲 x.p 左兄弟 结点的左兄弟 x.left 右兄弟 结点的右兄弟 x.right 孩 <a href="https://www.cnblogs.com/graywind/p/9409547.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9400616.html
Java String类源码解析 - GrayWind
String直接继承Object 含有一个char[] value,还有一个int hash默认值为0 new String()的构造产生的是一个值为””的字符数组 String(char value[], int offset, int count)当count=0且offset<=value.l
2018-08-01T04:54:00Z
2018-08-01T04:54:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】String直接继承Object 含有一个char[] value,还有一个int hash默认值为0 new String()的构造产生的是一个值为””的字符数组 String(char value[], int offset, int count)当count=0且offset<=value.l <a href="https://www.cnblogs.com/graywind/p/9400616.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9397117.html
算法导论——贪心算法 - GrayWind
贪心算法(greedy algorithm)是指,在每一步都做出当时看起来最佳的选择,也就是局部最优的选择,期望这样的选择能够导向全局最优解。所以并不是所有的问题都能得到全局最优解。 典型的例子如分数背包问题:背包容量为50kg,有三个商品分别是重60元/10kg、100元/20kg、120元/30
2018-07-31T09:24:00Z
2018-07-31T09:24:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】贪心算法(greedy algorithm)是指,在每一步都做出当时看起来最佳的选择,也就是局部最优的选择,期望这样的选择能够导向全局最优解。所以并不是所有的问题都能得到全局最优解。 典型的例子如分数背包问题:背包容量为50kg,有三个商品分别是重60元/10kg、100元/20kg、120元/30 <a href="https://www.cnblogs.com/graywind/p/9397117.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/9362335.html
算法导论——动态规划 - GrayWind
动态规划指的是一个问题可以拆分成多个小的最优子问题,并且这些子问题具有重叠,典型的如斐波那契数列:f(2)=f(1)+f(0),f(3)=f(2)+f(1),f(4)=f(3)+f(2),若使用简单的递归算法求f(4),则f(2)会被计算两次,当计算f(n)时需要计算f(n-1)和f(n-2)而f(
2018-07-24T13:19:00Z
2018-07-24T13:19:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】动态规划指的是一个问题可以拆分成多个小的最优子问题,并且这些子问题具有重叠,典型的如斐波那契数列:f(2)=f(1)+f(0),f(3)=f(2)+f(1),f(4)=f(3)+f(2),若使用简单的递归算法求f(4),则f(2)会被计算两次,当计算f(n)时需要计算f(n-1)和f(n-2)而f( <a href="https://www.cnblogs.com/graywind/p/9362335.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/8642999.html
SpringBoot+MyBatis开发环境搭建并实现登录权限过滤 - GrayWind
最近尝试了一下SpringBoot,发现在controller和service数量相同的时候,比之前用Tomcat启动SpringMVC快了一大半,配置也更少了,很多东西不去重新覆盖设置的话直接会以默认配置启动。 首先搭建一个同时支持RESTful和传统MVC的服务。完成后的项目目录结构如下: 建一
2018-03-25T02:09:00Z
2018-03-25T02:09:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】最近尝试了一下SpringBoot,发现在controller和service数量相同的时候,比之前用Tomcat启动SpringMVC快了一大半,配置也更少了,很多东西不去重新覆盖设置的话直接会以默认配置启动。 首先搭建一个同时支持RESTful和传统MVC的服务。完成后的项目目录结构如下: 建一 <a href="https://www.cnblogs.com/graywind/p/8642999.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/8467570.html
对于数据库连接池的一些思考和MyBatis的集成与使用 - GrayWind
Java应用要连接数据库需要先通过jdbc与数据库之间产生connection,然后通过sql语句产生statment,再执行这个statment查询的到ResultSet返回给应用,应用解析ResultSet获得Java支持类型的结果。 这里存在以下几个问题: 所以要避免这种情况就有了连接池。连接
2018-03-10T07:47:00Z
2018-03-10T07:47:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】Java应用要连接数据库需要先通过jdbc与数据库之间产生connection,然后通过sql语句产生statment,再执行这个statment查询的到ResultSet返回给应用,应用解析ResultSet获得Java支持类型的结果。 这里存在以下几个问题: 所以要避免这种情况就有了连接池。连接 <a href="https://www.cnblogs.com/graywind/p/8467570.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/8467428.html
Windows下安装MySQL.zip - GrayWind
作为关系型数据库的代表,开源的MySQL是基本是某个开发人员必学的,也是个人开发最适合的数据库——因为免费。 首先是去官网下载并安装MySQL。自打MySQL被甲骨文收购了之后,要先去Oracle官网注册个账号,不然不给你下载。注册就不说了,根据操作系统下载个MySQL Community版本。我这
2018-02-24T12:37:00Z
2018-02-24T12:37:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】作为关系型数据库的代表,开源的MySQL是基本是某个开发人员必学的,也是个人开发最适合的数据库——因为免费。 首先是去官网下载并安装MySQL。自打MySQL被甲骨文收购了之后,要先去Oracle官网注册个账号,不然不给你下载。注册就不说了,根据操作系统下载个MySQL Community版本。我这 <a href="https://www.cnblogs.com/graywind/p/8467428.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/8451918.html
maven+SpringMVC搭建RESTful后端服务框架 - GrayWind
今天来尝试一下搭建基于SpringMVC的RESTful标准的后端服务。 首先,什么是MVC?M-model,模型,指业务数据层,具体一点就是业务逻辑与数据库的交互;V-view,视图,用来展示数据,传统SpringMVC中控制器有返回类型ModelAndView,即返回含有数据模型与页面视图的js
2018-02-18T13:33:00Z
2018-02-18T13:33:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】今天来尝试一下搭建基于SpringMVC的RESTful标准的后端服务。 首先,什么是MVC?M-model,模型,指业务数据层,具体一点就是业务逻辑与数据库的交互;V-view,视图,用来展示数据,传统SpringMVC中控制器有返回类型ModelAndView,即返回含有数据模型与页面视图的js <a href="https://www.cnblogs.com/graywind/p/8451918.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/graywind/p/8450487.html
maven搭建webapp开发环境 - GrayWind
maven作为jar包管理工具在开发中是非常重要的。通过maven连接的仓库,只需要增加配置就可以自动从仓库中下载jar包并添加至工程,而不需要一个个去搜索,找到官网下载到本地,在从build path里面一个个添加。 首先还是安装,去官网下载一个压缩包并解压,有如下文件然后可以新建一个文件夹war
2018-02-16T14:31:00Z
2018-02-16T14:31:00Z
GrayWind
https://www.cnblogs.com/graywind/
【摘要】maven作为jar包管理工具在开发中是非常重要的。通过maven连接的仓库,只需要增加配置就可以自动从仓库中下载jar包并添加至工程,而不需要一个个去搜索,找到官网下载到本地,在从build path里面一个个添加。 首先还是安装,去官网下载一个压缩包并解压,有如下文件然后可以新建一个文件夹war <a href="https://www.cnblogs.com/graywind/p/8450487.html" target="_blank">阅读全文</a>