java
周孙静
这个作者很懒,什么都没留下…
展开
-
栈和队列的java实现
栈和队列的java实现原创 2016-02-16 13:43:21 · 344 阅读 · 0 评论 -
java对象实例化过程分析
我们平时经常随手就new一个对象出来,但是找对象真的这么简单吗?看看下面的分析~ 首先看一下类的生命周期 图中从1到3的过程统称为连接,而1-5这5个过程合起来称为类加载。在一个对象可以使用之前,需要经过类加载和实例化,也就是我们今天的主题“new一个java对象的过程”。那虚拟机在什么时机进行类加载呢?Java 虚拟机规范并没有对其做严格的定义,不同的JVM有不同的实现。而初始化的时机JV原创 2016-02-29 00:23:17 · 1697 阅读 · 0 评论 -
java动态代理学习
有一个类A,我们不想直接调用A的方法,而想要通过类B来间接调用A的方法。这时候A就叫做被代理类或者委托类(委托了任务的类),而B叫做代理类。 看下面的代码public class A{ public void method1() { System.out.println("A类的method1执行"); }}public class B{ A原创 2016-02-20 23:31:26 · 289 阅读 · 0 评论 -
java自定义注解学习
很多的类库和框架都用到了java的Annotation(注解),所以今天来学习一下怎么自定义注解。 一、Annotation的分类 1、标准注解:@Override, @Deprecated, @SuppressWarnings,这是java自带的注解 2、元注解:@Retention, @Target, @Inherited, @Documented,这是用来定义注解的注解 3、自定义注解原创 2016-02-20 22:19:46 · 266 阅读 · 0 评论 -
java反射学习
java反射可以让我们在运行时获得一个类的属性,方法等一系列信息。而Class类是用来描述一个类的详细信息的类。 每一个类都有一个对应的.class字节码文件。当程序运行时,java虚拟机会将这个.class文件加载,然后在堆上创建一个Class对象。而当我们new一个新的对象的时候,虚拟机就是用这个Class对象来新建一个对象,只是过程对于用户是透明的。 所以反射的第一步,就是要获取到这个Cl原创 2016-02-20 17:39:54 · 542 阅读 · 0 评论 -
java实现二分检索树
二分检索树的左子树比根小,右子树比根大。这里用二分检索树实现了一个符号表,包括常用的api。package symbolForm;import simpleStructure.Queue;public class BST<K extends Comparable<K>, V> implements SymbolForm<K, V>{ private Node root; privat原创 2016-02-19 20:48:29 · 388 阅读 · 0 评论 -
用递归实现排列组合(java代码)
全排列递归算法思想:假设求abcdefg的全排列,先将第一个字母确定为a,然后求bcdefg的全排列就行了,然后将a与b交换位置,重复上述过程,直到a和g交换。 全组合递归算法思想:假设求abcdefg的全组合,分两种情况,一、将a放入组合中,再求出剩下的bcdefg的组合。二、不将a放入组合,求出剩下的bcdefg的组合。 下面看代码:package practise;public class原创 2016-02-19 18:00:08 · 4584 阅读 · 0 评论 -
java单例模式的5种实现
下面的单例实现都是线程安全的。 一、package practise;public class Singleton1{ public static final Singleton1 INSTANCE = new Singleton1(); private Singleton1(){}}这是比较简单的单例模式,在类加载初始化的时候就实例化INSTANCE,所以可能在没有使用IN原创 2016-02-17 16:01:12 · 344 阅读 · 0 评论 -
java实现无向图的深度优先搜索和广度优先搜索
先实现无向图的数据结构。package graph;import simpleStructure.Bag;/** * 用邻接表做的图 * 用了一个Bag数组,数组的索引是顶点,索引的内容Bag里面存放与该顶点相邻的顶点 * @author Administrator * */public class Graph implements GraphItf{ private Bag原创 2016-02-16 19:32:03 · 1229 阅读 · 1 评论 -
用NFA实现正则表达式匹配(java代码)
看了一些高评论的博客,看起来都是很高深,我也写个看起来高深的。 用NFA实现正则表达式匹配,需要的类,有向图和有向图的深度遍历。下面NFA的实现。package stringFind;import digraph.Digraph;import digraph.DirectDFS;import simpleStructure.Bag;import simpleStructure.Stack2;原创 2016-02-16 14:52:11 · 1521 阅读 · 0 评论 -
堆排序的java实现
堆排序是用大顶堆或者小顶堆的性质来实现排序。 先解释一下优先队列,优先队列就是从这个队列里面出来的数字总是这个队列里面数字最大或者最小的那一个,而堆就是一个优先队列的具体实现,大顶堆是一个完全二叉树,父节点大于等于子节点,所以他的顶(根)是最大的,小顶堆反之。 所以我们先实现一个大顶堆。package sort;/** * 使用二叉堆的优先队列,每个节点大于等于两个子节点 * 并且是完全二叉原创 2016-02-16 14:34:37 · 226 阅读 · 0 评论 -
归并排序的java实现
归并排序的思想是,要是一个数组中的数字是两串已经排好序的,那把这两串儿数字并成一串数字,那这个数组就排好序了,所以又要先排好左右两边的子数组,这是一个明显的递归,直接看代码。AbstractSort在我的另一篇快排实现中有。package sort;public class MergeSort extends AbstractSort{ Comparable[] aux; @Over原创 2016-02-16 14:18:14 · 346 阅读 · 0 评论 -
快速排序的java实现
排序中快速排序和归并排序的平均时间复杂度的nlogn,所以是比较常用的两种排序。 快速排序的主要思想是递归的“切分”一串儿数字,切分就是选取一个数组中的数字,把数组中比这个数字小的放左边,大的放右边,这就完成了一次切分。然后再将切分点左边的和右边的子数组切分,如此反复,直到要切分的数组长度为1,整个数组就排好序了。 看代码。 先写个AbstractSort,实现一些基本通用的功能,在归并排序中原创 2016-02-16 14:00:39 · 319 阅读 · 0 评论 -
Java方法传值和传址分析
前段时间跟同学讨论了java中方法是传值还是传址的问题。 得出一个结论:java中一直是传值。 先看一段代码:public class Main{ public static void main(String[] args) { int i = 1; System.out.println(i); add(i); S原创 2016-04-26 17:10:54 · 829 阅读 · 2 评论