自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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:如何检测一个链表是否有环。

2017-10-06 23:57:18 933

原创 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关注的人

提示
确定要删除当前文章?
取消 删除