
数据结构—算法
文章平均质量分 85
回_憶
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
获取一个字符串在另一个字符串在出现的次数
//获取一个字符串在另一个字符串在出现的次数,比如"ab"在 "abkkcadkabkabkskab"中出现的次数 public static int getTime(String str1,String str2) { int count=0; int len; //循环执行 while((len=str1.indexOf(str2))!=-1) { count++原创 2014-11-07 20:50:42 · 668 阅读 · 0 评论 -
获取两个字符串中最大的相同子串
//获取两个字符串中最大的相同子串,比如str1="abcwerthelloyuiodef",str2="abcwecvhellobnm"可能会有多个 public static List getMaxSubString(String str1,String str2) { String maxStr=(str1.length()>str2.length())?str1:str2; S原创 2014-11-07 20:54:45 · 1354 阅读 · 0 评论 -
数据结构之栈
1、定义:栈(stack)是限制在插入和删除只能在一个位置进行操作的一种表结构,该合位置是表的末端,称作栈顶(top),对栈的基本操作的push()进栈和pop()出栈,一般栈都具有先进后出的特征。栈也不可能被放满。栈的结构图如下:2、栈的实现方法:a、栈的链表实现:通过在顶端插入元素实现push(),通过删除顶端元素来实现pop(),top操作表示返回到栈顶,/*使用链结构来原创 2014-12-07 21:13:23 · 600 阅读 · 0 评论 -
数据结构-快速排序 java实现
快速排序又可以分为冒泡排序原创 2014-11-15 09:14:31 · 568 阅读 · 0 评论 -
数据结构之树
一、树的基本定义:树(tree)是N(N>=0)个结点的有限集合。在任意的一棵树中有且只有一个特定的根(root)节点 ;当n》1时其余节点可分为m个互不相交的有限集,每个集合的本身就是一棵树。二、二叉树的定义:它的特点是每个节点最多只有两棵子树(二叉树中不存在度大于2的节点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。三、树的一些名词的含义:度:表示节点拥有的子树数;叶子(终端节原创 2014-12-07 19:42:00 · 659 阅读 · 0 评论 -
EhCache配置详解
Ehcache原创 2014-11-05 19:31:06 · 3836 阅读 · 0 评论 -
自定义规则 Collections.sort() 对 List 排序
一、Collections.sort()与Arrays.sort()的比较 Collections.sort()该算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素效益高子列表中的最低元素,则忽略合并)。此算法可提供保证的N*log(N)的性能,此实现将指定列表转储到一个数组中,然后再对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原创 2014-12-19 19:41:17 · 2443 阅读 · 0 评论 -
EhCache详细解读
特性一览1、快速轻量过去几年,诸多测试表明Ehcache是最快的Java缓存之一。Ehcache的线程机制是为大型高并发系统设计的。大量性能测试用例保证Ehcache在不同版本间性能表现得一致性。很多用户都不知道他们正在用Ehcache,因为不需要什么特别的配置。API易于使用,这就很容易部署上线和运行。很小的jar包,Ehcache 2.2.3才668kb。最小的原创 2015-01-26 18:00:33 · 5991 阅读 · 5 评论 -
数据结构之hash表,HashMap简单实现
一、Hash表概念在查找表中我们已经说过,在Hash表中,记录在表中的位置和其关键字之间存在着一种确定的关系。这样我们就能预先知道所查关键字在表中的位置,从而直接通过下标找到记录。使查找时间复杂度接近O(1)。 1)哈希(Hash)函数是一个映象,即: 将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可; 2)由于哈希函数是一个压缩原创 2014-12-26 19:15:14 · 613 阅读 · 0 评论 -
数据结构之堆
堆的定义堆是一棵完全被填满的二叉树,可以的例外是在底层,底层上的元素从左到右填入。这样的树被称为完全二叉树。下面是一棵完全二叉树的结构图: 堆的性质堆可以使我们想要的操作得到快速的执行,为了达到快速执行的目的,一般来说堆的最小元应该在根上,当我们要考虑任意子树也应该是堆,那么任意节点就应该小于它原创 2015-02-05 14:44:53 · 542 阅读 · 0 评论 -
LRUCache 详解
LRU的基本概念: LRU是Least Recently Used的缩写,近期最少使用算法。Java 实现LRUCache 1、基于LRU的基本概念,为了达到按近期最少使用排序,可以选择HashMap的子类 LinkedHashMap来作为LRUCache的存储容器。 2、LinkedHashMap的原理: a、 对于LinkedHashMap而言,它继承与Ha原创 2015-06-10 12:44:06 · 5331 阅读 · 0 评论 -
利用栈Stack实现队列(Queue)
实现说明:入队时,将元素压入s1;出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队;这个思路,避免了反复“倒”栈,仅在需要时才“倒”一次。package com.knowledgeStudy.threadLocal;import java.util.Stack;public class MyQueue原创 2015-07-15 15:04:18 · 1489 阅读 · 0 评论 -
java 多线程详解
关于线程的概念1、程序一般是指一段静态代码,静态对象;进程是程序的一次执行过程或正在运行的程序动态的的过程,有它的产生、存在和消亡的过程;线程是指一个程序内部的一条执行路径,也就是说每一个任务就代表一个线程。进程与线程相互联系然而又有区别,从本质上来说每个进行都有自己的一整套变量,而线程间可以共享变量,共享变量使得线程之间的通信比进行之间通信更有效、更容易。2、并不是每种情况都需要多线程,原创 2015-01-06 18:11:33 · 861 阅读 · 1 评论 -
System.arraycopy()方法详解
一、深度复制和浅度复制的区别 Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以对对象的值和对象的内容复制;浅复制是指对对象引用的复制。二、System.arraycopy()方法实现复制1、System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。使用这种方法实现的数组复制,表面看起来是一个深度原创 2014-12-19 20:29:12 · 14620 阅读 · 2 评论 -
约瑟夫环
package com.someusefuldesign.demo;import java.util.ArrayList;/*约瑟夫环*/public class YueshefuCircle { public static void main(String[] args) { int [] A=new int []{1,2,3,4,5,6,7,8,9,10}; Yueshe原创 2014-11-05 21:30:11 · 514 阅读 · 0 评论 -
String的常规方法
package com.string;public class Demo1 { /** * @author maco * @param 2014-04-27 */ public static void main(String[] args) { // TODO Auto-generated method stub String str1,str2,str3,st原创 2014-11-07 20:55:54 · 647 阅读 · 0 评论 -
数据结构-插入排序 java实现
插入排序又可分为原创 2014-11-15 09:04:03 · 513 阅读 · 0 评论 -
leetcode之Linked List Cycle
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class原创 2014-11-18 19:15:50 · 389 阅读 · 0 评论 -
LRUCache---leetcode
package com.abstractdatatype.linerlist;import java.util.HashMap;/*cache节点*/class LRUNode{ LRUNode pre; LRUNode next; int k; int val; LRUNode(int k,int val){ this.k=k; this.val=val; }}原创 2014-11-05 21:33:25 · 447 阅读 · 0 评论 -
贪婪算法 ---马踏棋盘
package com.dataconstructor.greedy;/*马踏棋盘问题,用贪婪算法 */ public class HorseStep { //定义参数,x方向 y方向的增量要一致 private static final int [] dx={-1,-2,-2,-1,1,2,2,1};// x方向的增量 private static fi原创 2014-11-19 19:11:10 · 921 阅读 · 0 评论 -
贪婪算法--背包问题详解
package com.dataconstructor.greedy;import java.util.Arrays;/* [背包问题]有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。物品 A B C D E F G重量(weight) 35 30 60 50 40 10 25价值(value)原创 2014-11-19 19:08:53 · 1701 阅读 · 0 评论 -
汉诺塔
package com.someusefuldesign.demo;/*假设有A B C三个柱子移动的顺序为: * */public class Hanoi { static int count = 0; public void hanoi(int n,String from,String depend,String to ){ //这里的n是原创 2014-11-05 21:28:28 · 452 阅读 · 0 评论 -
MD5
package com.md5;import java.security.MessageDigest;public class Md5 { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub原创 2014-11-06 21:16:48 · 418 阅读 · 0 评论 -
KMP算法
package com.abstractdatatype.string;/*字符串匹配的KMP算法*/public class StringMatch_KMP { public static void main(String[] args) { String s = "abbabbbbcab"; // 主串 String t = "bbcab"; // 模式串原创 2014-11-05 21:38:37 · 477 阅读 · 0 评论 -
hash函数
package com.abstractdatatype.hash;/*把字符串中字符的ASCII码(或Unicode码)值加起来*/public class HashMethod { public static void main(String[] args) { int length=HashMethod.hash("admin", 3); int size=HashM原创 2014-11-05 21:31:43 · 828 阅读 · 0 评论 -
Hashtable的应用:统计海量数据中出现频率高的数据
package com.abstractdatatype.hash;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Hashtable;import java.util.List;import java.util.Map.Entry;原创 2014-11-05 21:30:52 · 1090 阅读 · 0 评论 -
二分法查找
package com.abstractdatatype.search;/*二分法查找*/public class BinarySearch { public static void main(String[] args) { int [] a=new int [] {1,2,3,4,5,7,8,9}; int index=BinarySearch.binarySearch原创 2014-11-05 21:34:46 · 451 阅读 · 0 评论 -
ConcurrentHashMap源码解读
曾经研究过jkd1.5新特性,其中ConcurrentHashMap就是其中之一,其特点:效率比Hashtable高,并发性比hashmap好。结合了两者的特点。 集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发转载 2015-03-13 21:14:35 · 753 阅读 · 0 评论