- 博客(38)
- 资源 (1)
- 收藏
- 关注
转载 深入理解Java异常处理机制
目录(?)[-] 1 引子 2JAVA异常 4处理异常机制1 捕获异常trycatch 和 finallytry-catch语句trycatch-finally语句try-catch-finally 规则异常处理语句的语法规则trycatchfinally语句块的执行顺序2 抛出异常throws抛出异常使用throw抛出异常4 Throwable类中的常用方
2015-03-31 21:54:12 654
原创 Java中的<< >>运算符操作细节
int i = 16; System.out.println(i>>2);结果是4。 int i = 16; System.out.println(i>>32);结果是16。通常我们都把m>>n理解为当前值m除以2的n次方,同理>32时,结果是它本身,原因就在于位移操作符右边的参数要先进行模32的运算。例如上述的i>>2,实际上 temp = 2%32 = 2
2015-03-31 15:08:33 2097
转载 Java中a=a+b 与 a+=b区别
就单纯的执行这两条语句,不考虑编译器的优化的话,a=a+b的执行效率是低于a+=b的,因为它多进行了一步中间变量的操作,而且会多占用一个变量的空间。而Java编译器默认对其进行了优化,优化之后两条语句都当做 a+=b来执行了,所以实际上是没有任何却别的。其次说一下有关类型转换的区别。相信大家都碰到过这种情况:public class Test { public static
2015-03-31 14:18:29 8632
转载 Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
先给出一个无向图用Dijkstra算法(迪杰斯特拉算法)找出以A为起点的单源最短路径步骤如下应用Dijkstra算法计算从源顶点1到其它顶点间最短路径的过程列在下表中。Dijkstra算法的迭代过程:Floyd算法思想:1、从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。2、对于每一对顶点 u 和 v,看
2015-03-30 19:50:30 16110
转载 无向带权图的最小生成树算法——Prim及Kruskal算法思路
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。 最小生成树(MST):权值最小的生成树。 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路。可以把边上的权值解释为线路的造价。则最小生成树表示使其造价最小的生成树。 构造网的最小生成树必须解决下面两个问题: 1、尽可能选取权值小的边,但不能构成回路;
2015-03-30 16:09:01 27752 2
原创 Java实现拓扑排序:基于邻接矩阵,针对有向无环图
public void topoSort(){//仅仅针对有向图,基本思路是找到一个无后继的结点,将其删除,并放到排序数组的尾端,依次循环。直到没有结点。 int originalVertex = nVertex; while(nVertex > 0){ int noSucVert = getNoSuccessorVertex();//获取一个无后继结点 if(noSucV
2015-03-30 10:16:18 3719
原创 Java实现图:邻接矩阵表示、深度优先搜索、广度优先搜索、无向图的最小生成树
程序中用到的栈和队列实现请参见另外的博文。package test2;class Vertex{ private char vertexName; public boolean wasVisited; public Vertex(char name){ vertexName = name; wasVisited = false; } public void dis
2015-03-27 15:36:15 3044
原创 Java方法中引用类型的形参传递问题
众所周知,Java方法的形参如果是基本类型,是值传递,也就是说实参将数值传递给形参后,形参对值的操作跟实参变量毫无关系,举例:public static void change(int a, int b){ a = a + b; }int c = 1, d = 2;change(c , d);这时输出c, 其值还是1。假如是引用类型作为形参:public sta
2015-03-26 15:59:39 4450
原创 C/C++/Java不使用临时变量实现两个数的交换
方法一、加减减 a = a + b; b = a - b; a = a - b;方法二、异或运算(只能用于整数) a = a ^ b; b = a ^ b; a = a ^ b;方法一好理解,加加减减就出来了,关于方法二,个人目前还不是很理解,如果有懂数学证明的不妨留言交流一下。异或运算就
2015-03-25 15:18:23 1991
原创 Java 实现哈希化字符串的方法
/* 哈希化字符串的Horner方法: a4*n^4 + a3*n^3 + a2*n^2 + a1*n^1 + a0*n^0 可写成 (((a4*n+a3)*n + a2)*n + a1)*n + a0 我们从括号最内端开始计算,渐渐向外扩展。这里a4、a3、a2、a1、a0均代表字符串中的字符码,通常取a=1,b=2····依次类推,为了保证所有字符串能被唯一编码表示 n一
2015-03-24 20:51:42 9118
原创 Java实现hash表,线性探测,二次探测,再哈希法,链表法
package test2;class DataItem{ private int key; public DataItem(int data){ this.key = data; } public int getKey(){ return this.key; }}public class HashTable { private DataItem[] dataArray
2015-03-24 19:04:33 2785
转载 二叉搜索树升级版之红黑树
二叉查找树的一般操作的执行时间为O(lgn)。但二叉查找树若退化成了一棵具有n个结点的线性链后,则这些操作最坏情况运行时间为O(n)。红黑树的5个性质:每个结点要么是红的要么是黑的。 根结点是黑的。 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。 如果一个结点是红的,那么它的两个儿子都是黑的。 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含
2015-03-23 18:30:41 809
原创 Java 实现二叉搜索树的创建、查找、插入、删除结点
二叉搜索树特点:左孩子结点值比当前结点值小,右孩子结点值比当前值大或等于当前值。本文假设树中的结点值不存在相同的两项或多项。一、二叉搜索树的创建 1、首先定义结点类 代码如下:class TreeNode{ public int iData; //结点的数据项 public TreeNode leftChild; //结点指向左孩子的引用 publ
2015-03-20 20:51:34 4053 2
转载 Java i=i++;i = ?
int i=0; i=i++; 结果i是多少? 这是一个经常被提及的问题,答案一直五花八门。 具体测试一下以说明问题: 代码1:public class Test{ public static void main(String[] args){ int i=0;
2015-03-19 16:03:04 1766
原创 Java实现双向链表
package test2;class dLinkNode{ private long lData; public dLinkNode pre; public dLinkNode next; public dLinkNode(long lData){ pre = null; next = null; this.lData = lData; } public vo
2015-03-14 11:47:05 589
转载 Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题。以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见
2015-03-13 21:04:46 535
原创 Java双端链表实现队列
LinkNode 类参考上一篇文章。实现代码:package test2;class FirstLastList{private LinkNode first;private LinkNode last;public FirstLastList(){first = null;last = null;}public void insertFirst(int iData, double dData
2015-03-13 19:35:11 790
原创 Java链表实现堆栈
链表内容参考上一篇文章代码。package test2;public class LinkStack { private LinkList list; public LinkStack(){ list = new LinkList(); } public void push(int iData, double dData){ list.insertFront(iData
2015-03-13 17:57:49 905
原创 Java实现单链表
package test2;class LinkNode{ private int iData; private double dData; LinkNode next; public LinkNode(int i, double d){ iData = i; dData = d; } public void displayLink(){ System.out.pr
2015-03-13 13:47:28 534
转载 String,StringBuffer与StringBuilder的区别
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常
2015-03-11 21:37:31 442
原创 Java数组实现堆栈和队列
数组堆栈:public class Stack { private long[] stackArray; private int top; private int maxSize; public Stack(int maxSize){ this.maxSize = maxSize; top = -1; stackArray = new long[maxSize]; }
2015-03-11 18:31:11 2006
转载 java设计模式之单例模式
在GoF的23种设计模式中,单例模式是比较简单的一种。然而,有时候越是简单的东西越容易出现问题。下面就单例设计模式详细的探讨一下。所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等。 1、最简单的实现首先,能想到的最简单的实现是,把类的构造函
2015-03-09 20:25:46 493
原创 Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
冒泡排序: public void bubbleSort(){//O(n^2) //每一趟的比较一次就可能交换一次 for(int i=0;i<nElements;i++){ for(int j=0;j<nElements-i-1;j++){///// if(array[j]>array[j+1]){ swap(j,j+1); } } } }选
2015-03-09 20:23:13 1629
原创 Java二维字符串数组
package test2;public class ArrayTwo { public static void main(String[] args) { // TODO Auto-generated method stub String array[][] = new String[3][0]; array[0] = new String[2]; array[1] =
2015-03-09 14:50:24 19759 2
原创 Java实现数组二分查找及递归二分查找
public void binarySearch(int value){ int low = 0; int upper = nElements - 1; int currtIn = (low+upper)/2; while(true){ if(array[currtIn] == value){ System.out.println("find it :_"+currtIn+" "
2015-03-09 12:58:29 2620
原创 Java 中对数组进行封装
package test2;//import java.util.*;public class Test { private int array[]; private int nElements; public Test(int max){ array = new int[max]; nElements = 0; } public boolean insert(int va
2015-03-09 11:00:44 2085
转载 Java堆和栈的区别(String类)
Java堆和栈的区别(String类) 堆与栈 Java的堆是一个运行时数据区,对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃
2015-03-07 22:24:23 793
转载 Java中String 操作及前期绑定与后期绑定例子
class X{ public static String strX="hello";}class Y{ public static String strY="hello";}class Z{ public static String strZ="hell"+"o";}class Test{ public static void main(String[]
2015-03-07 21:50:40 652
转载 java的继承机制及不足
使用继承时要记住的3句话:1、子类拥有父类非private的属性和方法;2、子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;3、子类可以用自己的方式实现父类的方法;构造方法:子类不能继承父类的构造方法,但可以通过super()调用,声明子类对象时,自动调用父类构造方法,前提是父类存在默认构造方法存在,但如果手动写了带参的其他构造方法,编译器将不会生成默认构造方法,这
2015-03-07 19:54:02 720
转载 java方法的重载与覆盖的条件
java多态的2种表现形式 方法重载和方法覆盖方法重载:同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载。方法覆盖:子类重新实现了父类中的方法。 方法重载[java] view plaincopy/** * 方法重载满足的条件 * 同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载 * 参数列表不同指参数的类型,参
2015-03-07 18:48:16 4323
转载 java成员变量的前期绑定例子
class A{int count = 20;}class B extends A{int count = 200;}public class Test{public static void main(String[] args){A a = new A();System.out.println(a.count);B b = new B();System.out.println(b.cou
2015-03-07 14:40:37 903
转载 java 动态绑定及成员变量、构造方法,static方法,private,final方法前期绑定
动态绑定意味着:目前正在调用的方法正是最适用于要操作对象的那个方法。然而它并不意味着对所有的参数都执行最佳匹配。在Java中,一个方法的参数在编译阶段常被静态地绑定。一个例子:class Base{ public void foo(Base x){ System.out.println("Base.Base"); }
2015-03-07 14:05:00 2237
转载 关于Java重载方法匹配优先级
写出以下程序的输出: ?12345678910111213141516171819202122232425public class Overload { publicstatic void say(long arg)
2015-03-07 12:52:59 1897
转载 深入理解Java的方法调用
众所周知Java的参数传递也分为值传递和引用传递 值传递 ?123456789101112131415161718public class MethodAndParam { staticvoid swap(inta,int b){ in
2015-03-06 19:40:47 660
转载 深入理解JAVA的多态性
Java的多态性表现在2个方面,1方法的覆盖、2方法的重载。 ?12345678910111213141516171819202122232425262728293031323334353637383940
2015-03-06 19:27:15 769
转载 java中四种访问权限
pubicprotecteddefaultprivate同一类中的成员是是是是同一包中的成员是是是否不同包的子类是是否否不同包的非子类是否否否
2015-03-06 18:27:59 595
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人