
菜鸟自学Java系列
文章平均质量分 79
zxman
这个作者很懒,什么都没留下…
展开
-
集合框架源码分析六之堆结构的实现(PriorityQueue)
/**** 优先队列是用了一种叫做堆的高效的数据结构,* 堆是用二叉树来描述的,对任意元素n,索引从0开始,如果有子节点的话,则左子树为* 2*n+1,右子树为2*(n+1)。* 以堆实现的队列如果不为空的话,queue[0]即为最小值。* * PS:此优先队列中的元素并不是升序排列的,只能说是"基本有序"* 但是queue[0]为树根而且必定是最小元素*/转载 2012-09-04 00:39:28 · 1466 阅读 · 0 评论 -
java实现平衡二叉树(详细分析)
package com.utils;import java.util.Iterator;import java.util.NoSuchElementException;/** * 平衡二叉树 * 定义:首先它是一种特殊的二叉排序树,其次它的左子树和右子树都是平衡二叉树, * 且左子树和右子树的深度之差不超过1 * 平衡因子:可以定义为左子树的深度减去右子树的深度 * * 平衡二转载 2012-09-04 00:03:28 · 19404 阅读 · 4 评论 -
Observer模式在J2EE中的实现
引言:设计模式是经验的文档化。它是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。更通俗的来说,它是一个问题/解决方案对。一旦我们掌握了设计模式,就等于拥有了一支强有力的专家队伍。它甚至能够使面向对象的新手利用前人的经验找出职责明确的类和对象,从而获得优雅的解决方案。由于设计模式也是重构的目标,如果在设计的初期适当地引入设计模式,可以减少重构的工作量。但是,我们也不转载 2012-08-18 16:52:41 · 769 阅读 · 0 评论 -
java中的IO详解(上)
Java中的IO整理完整版(一) 【案例1】创建一个新文件1 import java.io.*; 2 class hello{ 3 public static void main(String[] args) { 4 File f=new File("D:\\hello.txt"); 5 try{ 6转载 2012-08-17 09:10:34 · 2518 阅读 · 0 评论 -
Java I/O中的对象序列化
Java I/O中的对象序列化Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象。利用对象的序列化,可以实现轻量级持久性,这意味着一个对象的生存周期并不取决于程序是否正在执行,它可以生存于程序的调用之间。通过将一个序列化对象写入磁盘,然后在重新调用程序时恢复该对象,就能够实现持久性的效果。JDO、Hibern转载 2012-08-17 16:13:57 · 3047 阅读 · 0 评论 -
java 多线程经典例子——生产者与消费者的问题
产品名称类:public class Product { //产品名称 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }生产者类:/** * 生产者 * @author 饭转载 2012-08-01 14:17:51 · 4252 阅读 · 1 评论 -
死锁的原因详解
当同步使用过多时会出现死锁的情况。以下代码实现死锁://死锁的实现 class A { public void get(){ System.out.println("A说:我开始启动了,B,给我你的资源"); } public void say(){ System.out.println("A获转载 2012-08-01 13:00:20 · 725 阅读 · 0 评论 -
字节流与字符流的区别详解
字节流与字符流先来看一下流的概念:在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。字节流与字符流在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是转载 2012-08-17 09:23:20 · 168402 阅读 · 38 评论 -
java中的IO详解(下)
BufferedReader的小例子注意: BufferedReader只能接受字符流的缓冲区,因为每一个中文需要占据两个字节,所以需要将System.in这个字节输入流变为字符输入流,采用:1 BufferedReader buf = new BufferedReader( 2 new InputStreamReader(System.in));转载 2012-08-17 09:12:14 · 3553 阅读 · 0 评论 -
线程中断问题详解
//线程的中断操作(1)class MyThread implements Runnable{ public void run(){ System.out.println("1、进入run方法"); try{ Thread.sleep(10000); //sleep方法会抛出一个中断异常 }catch(InterruptedException e)转载 2012-07-31 21:57:10 · 980 阅读 · 0 评论 -
java多线程详解
java中的多线程在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。对于直接继承Thread的类来说,代码大致框架是: class 类名 extends Thread{ 方法1; 方法2; … public void run(){ // other code… } 属性1; 属性2; …转载 2012-07-31 19:59:00 · 1550 阅读 · 0 评论 -
Thread 与Runnable区别详解
//使用Thread实现线程不能实现资源共享class MyThread extends Thread{ private int ticket=5; private String name; public MyThread(String name ){ this.name=name; } public void run(){ for(int i=0;i<1转载 2012-07-31 21:38:07 · 897 阅读 · 0 评论 -
Java数据类型转换全解
Java数据类型转换全解我们知道Java语言是典型的支持面向对象的程序语言,但考虑到有些基本Java数据类型的结构简单,占内存小且存取速度快等优点,Java依然提供了对这些非面向对象的简单Java数据类型的支持。AD: 本文向大家描述一下Java数据类型转换,Java语言的Java数据类型有两大类:一类是简单类型,也称主要类型转载 2012-07-30 09:12:21 · 975 阅读 · 0 评论 -
java中的排序算法——插入排序详解
package com.algorithm;/** * 插入排序及其变体 * * List可转化为数组进行排序 * Object数组中的元素必须实现Comparable接口,即元素必须是可比的 */public class InsertSort {/*** 直接插入排序*/public static void insertSort(转载 2012-09-04 00:14:58 · 1952 阅读 · 0 评论 -
用动态数组模拟双向循环链表
简单来说其实使用数组模拟LinkedList。同LinkedList的操作基本相似。 基本原理为:数组存放Entry对象,包含数据部分,指针部分(数组下标) 添加,删除基本操作改变指针。数组包含两个链表,一个备用链表(空数据,仅含指针)与 实际存放数据的链表(即保存存入的数)。添加先从备用链表中获取一个空闲节点, 移除把节点重新放入备用链表等待获取。采用ArrayList的数组自动转载 2012-09-04 00:19:43 · 1621 阅读 · 0 评论 -
集合框架源码分析一(接口篇)
一。Iterable接口 public interface Iterable { /** * 实现此接口的所有集合都可以使用foreach循环 * 由于Collection接口扩展自Iterable接口, * 标准类库的任何集合都可以使用"for each"循环 * @return an Iterator. */转载 2012-09-04 00:27:59 · 931 阅读 · 0 评论 -
集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
一。ArrayList,可自动扩充容量的动态数组 public class ArrayList extends AbstractList implements List,RandomAccess, Cloneable, java.io.Serializable {private static final long serialVersionUID = 868345258112289转载 2012-09-04 00:34:25 · 1801 阅读 · 0 评论 -
java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
package com.sort;/** * 选择排序: * 简单选择排序,树形选择排序与堆排序 * */public class SelecSortDemo {/*** --------------------------------------------* 简单选择排序* 原理:假设列表中有n个元素,从第一个元素开始,在第一个元素*转载 2012-09-04 00:12:52 · 3110 阅读 · 0 评论 -
二叉排序树的实现——java
package com.utils;import java.util.Iterator;import java.util.NoSuchElementException;/** * 二叉排序树,也可以成为二叉查找树 * 它的性质如下: * 1.若它的左子树不为空,则左子树上所有的节点均小于其根节点 * 2.若它的右子树不为空,则右子树上所有的节点的值均大于转载 2012-09-04 00:06:25 · 3324 阅读 · 0 评论 -
java二叉树的运用
树节点定义:class TreeNode { public TreeNode left; public TreeNode right; public int value; public TreeNode(TreeNode left, TreeNode right, int value) { this.left = left;转载 2012-09-03 23:54:47 · 2392 阅读 · 0 评论 -
java的23设计模式
|1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细转载 2012-09-03 23:49:56 · 1125 阅读 · 0 评论 -
集合框架源码分析五之LinkedHashMap,LinkedHashSet
LinkedHashMap是为了解决遍历Hash表的无序问题,它内部维护了一个链表用于记录你插入元素(或你访问元素的顺序)的位置,遍历时直接遍历链表,元素的顺序即为你插入的顺序,但是Entry对象要多加两个成员变量before和after用于记录链表的前驱和后继。所以LinkedHashMap的的存储效率要低于HashMap,但是遍历效率要高于HashMap。 import java.转载 2012-09-04 00:38:31 · 2150 阅读 · 0 评论 -
集合框架源码分析四(Collections类详细分析)
我认为Collections类主要是完成了两个主要功能 1.提供了若干简单而又有用的算法,比如排序,二分查找,求最大最小值等等。 2.提供对集合进行包装的静态方法。比如把指定的集合包装成线程安全的集合、包装成不可修改的集合、包装成类型安全的集合等。 package java.util;import java.io.Serializable;import java.io.转载 2012-09-04 00:36:37 · 3898 阅读 · 0 评论 -
集合框架源码分析——抽象类
public abstract class AbstractCollection implements Collection { /** * 唯一构造方法 */ protected AbstractCollection() { } // Query Operations /** * *转载 2012-09-04 00:29:13 · 920 阅读 · 0 评论 -
java中的排序算法——归并排序
为什么使用归并排序? java中的Arrays.sort(Object[] o)是对数组进行排序,它使用的是归并排序的方式, 快速排序要比归并排序更快一些,但为什么使用归并排序了?原因是归并排序是一种稳定的排序 方式,即归并排序不交换相同的元素,这就意味着,在按一种方式排序后同时可以按另外一种 方式进行排序。比如员工可以首先按工资排序,然后按名字排序,一种排序不会打乱另一种转载 2012-09-04 00:18:11 · 1049 阅读 · 0 评论 -
哈弗曼树的实现
提到哈弗曼树就必须提到节点权值,权值一般具有实际意义,比如此节点出现的概率,次数等。 必须提供权值才能构建出一棵哈弗曼树,因为哈弗曼树的定义为带权路径长度最小的二叉树。 树的带权路径长度为所有叶子节点的带权路径长度。 节点的带权路径长度为该节点到树的路径长度乘以节点权值。 哈希曼树最主要的应用是产生哈希曼编码。 为特点元素设计哈希曼编码要求二进制编码尽可能的短,并且任意一个字符转载 2012-09-04 00:10:07 · 1589 阅读 · 0 评论 -
java 实现二叉树操作
java实现二叉树的创建、先序遍历、中序遍历、后序遍历及二叉树的深度 public class Tree { private int data;// 数据节点 private Tree left;// 左子树 private Tree right;// 右子树 public Tree(int data) { this.data =转载 2012-09-03 23:48:32 · 902 阅读 · 0 评论 -
tomcat 配置方法
随着java的流行,其在web上的应用也越来越广,tomcat作为一个开源的servlet容器,应用前景越来越广,本文将向你讲述tomcat的一些知识。一:简介tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品(Most Innovative Java Product),同时它又是sun公司官方推荐的servlet和转载 2012-09-04 00:54:23 · 1468 阅读 · 0 评论 -
java泛型理论
java泛型详解 JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0。这说明Java已经有大幅度的变化。本文将讲解JDK5.0支持的新功能-----Java的泛型. 1、Java泛型 其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str转载 2012-07-29 21:16:15 · 760 阅读 · 0 评论 -
Java泛型应用详解
java 泛型详解 普通泛型Java代码 class Point{ // 此处可以随便写标识符号,T是type的简称 private T var ; // var的类型由T指定,即:由外部指定 public T getVar(){ // 返回值的类型由外部决定 return var ; }转载 2012-07-29 21:10:41 · 1731 阅读 · 0 评论 -
java中的io系统详解
Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWr转载 2012-08-05 17:21:13 · 712 阅读 · 0 评论 -
细说JVM的数据类型、堆与栈
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte, short, int, long, char, float, double, Boolean, returnAddress引转载 2012-08-05 17:08:05 · 765 阅读 · 0 评论 -
如何区分引用类型和原始类型
下表列出了原始类型以及它们的对象封装类。原始类型和封装类原始类型封装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloa转载 2012-08-05 16:54:14 · 813 阅读 · 0 评论 -
Java内存分配原理
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中无法控制◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中◆堆:存放用new产生的数据◆静态域:存转载 2012-08-05 16:51:47 · 503 阅读 · 0 评论 -
从Java代码到Java堆理解和优化您的应用程序的内存使用
从Java代码到Java堆理解和优化您的应用程序的内存使用简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销、对象委托的成本和不同集合类型的内存效率。您将了解到如何确定应用程序中的哪些位置效率低下,以及如何选择正确的集合来改进您的代码。优化应用程序代码的内存使用并不是一个新主题,但是人们通转载 2012-08-05 16:49:45 · 730 阅读 · 0 评论 -
深入分析 Java I/O 的工作机制
深入分析 Java I/O 的工作机制I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其突出,很容易成为一个性能瓶颈。正因如此,所以 Java 在 I/O 上也一直在做持续的优化,如从 1.4 开始引入了 NIO,提升了 I/O 的性能。关于 NI转载 2012-08-05 16:47:37 · 1637 阅读 · 0 评论 -
是 String , StringBuffer 还是 StringBuilder ?
相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE 5.0 里面带来的一个新的字符操作的类—— StringBuilder (先别忙着扔我砖头,我还算清醒,我这里说的不是 C #, Java 也有 StringBuilder 类)。那么这个 Stri转载 2012-08-05 16:22:14 · 540 阅读 · 0 评论 -
JAVA中String与StringBuffer的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结。在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的,2.String 对一串字符进行操作。不可变类。3.StringBuffer 也是对一串字符进行操作,但是可变类。String:是对象转载 2012-08-05 16:17:28 · 602 阅读 · 0 评论 -
日期类的加减及java中所以日期类的操作算法大全
1.计算某一月份的最大天数1Calendar time=Calendar.getInstance();2time.clear();3time.set(Calendar.YEAR,year);//year 为 int4time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为05int day=time.getActua转载 2012-08-05 16:00:33 · 1025 阅读 · 0 评论 -
全面解析Java中的String数据类型
1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 3. String str=”kvill”; String str=n转载 2012-07-20 21:58:35 · 618 阅读 · 0 评论