- 博客(23)
- 收藏
- 关注
原创 Java:继承与组合的区别
继承和组合都是代码复用的方法。组合是指在新类中创建原有类的对象,重复利用已有类的功能。继承是面向对象的主要特征之一,它根据原有类的实现来定义一个新类的实现。他们的主要区别在于:1. 组合是 has -a 的关系,而继承是 is-a的关系。那么实际使用时,什么时候使用组合呢?1. 子类只希望继承父类的部分方法。避免造成系统的膨胀和臃肿。2. 继承的子类的功能需要在运行
2017-10-14 21:10:51
492
原创 设计模式:单例模式,懒汉与饿汉
在某些情况下,有些对象只需要一个就可以了,换句话说,每个类只需要一个实例。比如,一台计算机连接多台打印机,但这个计算机上打印程序只能有一个,这里就需要单例模式来避免打印机左右同时输入到打印机中。、单例模式的作用就是保证整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个。单例模式主要有三个特点:1. 单例类只能有一个实例2. 单例类必须创建自己唯一的实例。3. 单例类必
2017-10-12 18:23:06
6534
2
原创 Java:二叉树的递归遍历
class TreeNode{ private Object data; public Object getData() { return data; } public void setData(Object data) { this.data = data; } TreeNode left=null; TreeNode right=null;}public class
2017-10-07 21:00:36
336
原创 Java:如何用两个队列实现栈
假设连个队列q1,q2,一个做入队列,一个做出队列。q1提供入栈,w2tigong弹栈。 入栈时,只需入队列q1即可。弹栈时,需考虑两种情况。1. q1 只有一个元素,出队即可。2. q1 不只一个元素,此时弹栈的数据应该为位于队尾的元素,也就是最后进入的元素。我们需要把q1 元素依次出队,保存到q2中,其中q1 的最后一个元素不入q2,直接输出。然后将队列q2 的元素再入队q1.
2017-10-07 13:10:16
2729
1
原创 Java:如何利用两个栈实现队列
设s1为入队栈,s2为出队栈。入队时,对s1入栈即可。出队时,要考虑两种情况:1. 栈s2不为空,则直接弹出s2数据;2. 栈s2为空,则依次弹出s1数据,放进s2中,再弹出s2数据。import java.util.Stack;//用连个栈模拟队列操作public class myQueue1 { private Stack s1=new Stack();//入队 priv
2017-10-07 12:11:12
755
原创 Java:如何用链表实现队列
class Node{ Node next=null; E data; public Node(E data) { this.data=data; }}public class myQueue { private Node head=null; private Node tail=null; public boolean isEmpty() { return head=
2017-10-07 11:55:28
303
原创 Java:如何用链表实现栈
class Node{ Node next=null; E data; public Node(E data) { this.data=data; }}public class Mystack { Node top=null;//栈顶 //isEmpty(),测试堆栈是否为空。 public boolean isEmpty() { return top==null; }
2017-10-07 11:30:22
713
原创 Java:倘若一个链表有环,如何找到环的入口
如果单链表有环,按照判断是否有环的思路,当快指针和慢指针相遇时,slow指针肯定没有遍历完链表,而fast指针已经在环内循环了n圈。假设slow指针走了s步,则fast指针走了2*s步,设环长为r,则:2*s=s+n*r;s=n*r;设链表头到环入口距离为l,入口处距离相遇点距离为a,则:s=l+a+mr;得:l=(n-m)r - a可见,相遇后,如果在链表头和相遇点各设置
2017-10-06 23:59:06
1874
原创 Java:如何寻找单链表的中间节点
解决方法:设置两个指针,一个快指针,每次走两步,一个慢指针,每次走一步。public class searchMid { public Node method(Node head) { Node p=head; Node q=head; while(q!=null&&q.next!=null&&q.next.next!=null) { p=p.next; q=
2017-10-06 23:42:21
2617
原创 Java:如何实现链表的反转
public class reverseiteratively { public static void method(Node head) { Node p1=head; Node p2=head.next; Node temp=null; while(p2.next!=null) { temp=p2.next; p2.next=p1; p1=p2; p
2017-10-06 23:33:50
460
原创 Java:如何找出单链表中的倒数第k个元素
设置两个指针,相差k个节点。//如何找出单链表中的倒数第k个元素public class findelem { public static Node method(Node head,int k) { if(k<1) { return null; } Node p1=head; Node p2=head; for(int i=0;i<k-1&&p1!=null;i++
2017-10-06 23:13:11
2318
原创 Java:如何从链表中删除重复数据
//如何从链表中删除重复的数据第一种方法:遍历链表,把遍历的值存储到一个hashtable中,在遍历过程中,若当前访问的值在hashtable中已经存在,则说明这个数据是重复的第二种方法:对链表进行双重循环。public class deleteDuplecate { static void method1(Node head) { Hashtable table=new Has
2017-10-06 22:55:50
821
原创 Java:求二叉树中节点的最大距离
class Node{ public int data; public Node left; public Node right; public int leftmaxdistance; public int rightmaxdistance; public Node(int data) { this.data=data; this.left=null; this.righ
2017-10-06 20:18:22
1254
原创 Java:volatile的作用
谈及volatile作用是,我们首先要了解,Java的缓存。在Java编程中,有时为了提高运行效率,编译器会自动对其进行优化,把经常被访问的变量缓存起来,程序在读取这个变量时,有可能直接从缓存中读取,而不是从内存中读取。但也有一个缺点,就是在多线程编程中,变量的值可能因别的线程而发生变化,但缓存中的 值却为发生变化,从而导致,读取不一致。 为了解决这个问题,volatile应运而生。
2017-10-02 15:23:48
196
原创 Java: 内存泄漏
内存泄露是什么呢? 内存泄漏是指,一个不再被程序使用的对象或变量还在内存中战友存储空间。为了防止研发人员忘记释放已被分配的内存,Java语言引入了垃圾回收机制,由垃圾回收器回收不再使用的对象,既然有垃圾回收器来负责回收垃圾,那么,Java中是否还会存在内存泄漏的问题呢?答案是存在内存泄漏。首先,在Java语言中,判断一个内存空间是否符合垃圾回收的标准有两个:1. 给对象赋予了空值nul
2017-09-18 20:29:42
367
原创 Java:自定义类做key值,需注意什么
hashtable和hashmap都是用来存放键值对的一种容器,他们都有一个特点就是,不能用来存储重复的键值。我们首先来说一下,他们是如何判断是否存在重复键值的。主要有两个步骤:1.调用key的hashcode()方法生成一个hash值h1,如果这个h1在hashmap中不存在,那么就直接将添加到hashmap中;否则认为存在。2. 认为存在后,找出所有hash值为h1的key,然后调
2017-09-14 14:03:01
2039
原创 Java:树的最大深度
如何求二叉树的最大深度呢?利用的方法是深度搜索,终止条件是左右孩子为空。static int getmax(treenode node) { if(node==null) { return 0; }else { int lef=getmax(node.left); int rig=getmax(node.right); return Math.max
2017-09-13 20:29:34
1384
原创 Java:求树最小的深度
问题描述:Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.这里要求根节点到最近的叶子节点的距离,
2017-09-13 19:55:35
790
原创 Java:关于深复制与浅复制
为什么会有深复制和浅复制这两个概念呢?首先,我们想一下,对于基本数据类型,jvm采用的值传递;对于引用类型,JVM采用的是地址传递。我们设想 有这么一段程序:Obj a=new Obj();Obj b=a;显然,在这里,引用变量a和b,都指向了同一个对象,任意改变a或者b,都将会使对方发生相同的改变。那么如果我们只想改变a而不想改变b,怎么办呢?这里就需要我们的浅复制和深复制。如果
2017-09-13 18:13:51
260
原创 Java:关于继承中的重写
继承,是复用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类当中抽象出父类。在父类中定义这些相同的属性和方法,所有的子类无需重新定义这些属性和方法,而只需通过extends语句来声明继承父类即可。 关于这个继承说法,大家已经很明白了。我想讲一下,在继承中的重写要注意的问题。子类方法 对父类方法的重写,需要注意一下几点,简单说为:两同,两小,一大:同:方法名相同
2017-09-13 11:52:19
495
原创 网格走法数目
问题描述:有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。
2017-09-13 11:20:36
2104
原创 八皇后问题
采用了 递归和剪枝,一旦出现不符合要求的位置,立即停止搜索,节约了资源和时间。con()函数用来判断是否符合要求。结果显示共92种放置策略。public class Queen { static int m=0; static int array[]=new int[8]; static boolean con(int a,int b,int c,int d) { retur
2017-09-08 11:01:49
297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人