摘要:
【链表】 是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。 由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多, 但是查找一个节点或者访问特定编号的节点则需要O(n)的时间, 而顺序表相... 阅读全文
摘要:
是限定仅在表尾进行插入或删除操作的线性表 表尾称为栈顶,表头称为栈底 特点:后进先出 操作: 1.推入push 2.弹出pop 栈的数组实现: public class ArrayStack { private List list = new ArrayList(); public boolean isEmpty(... 阅读全文
摘要:
它是用一个散列函数把关键字 映射到散列表中的特定位置。 在理想情况下,如果元素e 的关键字为k,散列函 数为f,那么e 在散列表中的位置为f (k)。要搜索关键字为k 的元素,首先要计算出f (k),然后看 表中f (k)处是否有元素。如果有,便找到了该元素。如果没有,说明该字典中不包含该元素... 阅读全文
摘要:
快速排序使用分治法策略来把一个序列分为两个子序列 算法步骤: 1. 从数列中挑出一个元素,称为 "基准"(pivot) 2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面 (相同的数可以到任一边)。在这个分割结束之后,该基准就处于数列的中间位置。这个称为分割(partition)操作 3. 递归地(recursive)把小于基准值元素的... 阅读全文
摘要:
算法步骤: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 public static void bubbleSort(... 阅读全文
摘要:
算法步骤: 1. 未排序序列中找到最小元素,存放到排序序列的起始位置 2. 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾 3. 以此类推,直到所有元素均排序完毕 比较复杂度:n(n-1)/2 交换(赋值)复杂度:n-1 优点:相比冒泡排序来讲,交换的次数减少了 缺点:相对快速排序,比较次数仍然是n² public static void... 阅读全文
摘要:
合并算法,指的是将两个已经排序的序列合并成一个序列的操作 操作步骤: 1. 建立一个数组C用来存放合并后的数 2. 从数组A和数组B的首端开始比较,将大的元素放入C中 3. 重复2操作,直至其中一个数组的元素被用完,则将另一个数组中剩余的元素拷贝到C中 比较复杂度:n㏒n 交换(赋值)复杂度:n㏒n 优点:比较快速的排序算法 缺点:需要额外的空间存放临... 阅读全文
摘要:
算法步骤: 1.从第一个元素开始,该元素可以认为已经被排序 2.取出下一个元素a,在已经排序的元素序列中从后向前扫描 3.如果已排序中的元素b大于a,则将元素b后移一个位置 4.重复步骤3,直到找到已排序的元素x小于或者等于元素a 5.将元素a插入到x的后面 6.重复步骤2~5 public static void insertionSort(Intege... 阅读全文
摘要:
上一节我们讲到了如何用散列和链表实现HashMap,其中有一个疑问今天已经有些答案了,为什么要用链表而不是数组链表的作用有如下两点好处1. remove操作时效率高,只维护指针的变化即可,无需进行移位操作2. 重新散列时,原来散落在同一个槽中的元素可能会被散落在不同的地方,对于数组需要进行移位操作,... 阅读全文
摘要:
上一节中实现的SimpleHashMap,没有解决冲突的问题,这一节我们继续深入由于table的大小是有限的,而key的集合范围是无限大的,所以寄希望于hashcode散落,肯定会出现多个key散落在同一个数组下标下面,因此我们要引入另外一个概念,将key和value同时存入table[index]... 阅读全文
摘要:
最近闲的很,想和大家一起学习并讨论下Java的一些源代码以及其实现的数据结构,不是什么高水平的东西,有兴趣的随便看看1. 为什么要用Map,以HashMap为例 很多时候我们有这样的需求,我们需要将数据成键值对的方式存储起来,根据key来获取value(value可以是简单值,也可以是自定义对象) ... 阅读全文
摘要:
1.软件安装 1.1下载和安装apache Apache 2.2 :http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 1.2下载和安装tomcat7.0.37(略) 2.Apache 配置 2.1启动自动加载代理模块 打开conf/httpd.conf去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(p... 阅读全文
摘要:
前面写了一篇关于动态切换Hibernate SessionFactory的文章发现存在一些问题: 需要配置多个HibernateTransactionManager和多个Spring 切面 这样带来两个问题 1. 程序效率降低,因为Spring进行多次Advice的拦截 2.... 阅读全文
摘要:
目录一、简介Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块间的高效依赖开发一、为什么要用Nexus虽然可以通过中央仓库来获取我们所需要的jar包,但是现实往往是存... 阅读全文
摘要:
目录一、作用Maven仓库分为本地仓库和远程仓库,集中存放项目引用的jar包,无需将jar包放在程序中,结合Maven项目的pom.xml,使得项目管理jar包更容易,有以下几个优点:对于项目来说,无需关心jar包存储问题,只管理好配置即可易于搜索和使用jar包,不需要到网上到处找,仓库提供了几乎所... 阅读全文
摘要:
目录pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件、开发者需要遵循的规则、缺陷管理系统、组织和licenses、项目的url、项目的依赖性以及其他所有的项目相关因素。下面是我在项目中应用的一个pom.xml,仅供参考更多细节内容将在后面的... 阅读全文
摘要:
目录一、简介settings.xml对于maven来说相当于全局性的配置,用于所有的项目,当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用settings.xml中的settings元素来确定这些配置。这包含了本地仓库位置,远程仓库... 阅读全文
摘要:
目录我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可。1. 依赖配置 依赖可以声明如下: ... group-a artifact-a 1.0 group-c ... 阅读全文
摘要:
目录1.为什么要定义Maven坐标 在我们开发Maven项目的时候,需要为其定义适当的坐标,这是Maven强制要求的。在这个基础上,其他Maven项目才能应用该项目生成的构件。 2.Maven坐标详解 Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Mave... 阅读全文
摘要:
目录1. 三套生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean,default和site。 每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。 以clean生命周期为例,它包含... 阅读全文