- 浏览: 205875 次
- 性别:
- 来自: 紫禁城
文章分类
最新评论
-
a1439226817:
<!doctype html><html l ...
发布一个支持N级下拉列表联动的控件 -
a1439226817:
也不高个测试的demo,别人怎么用啊
发布一个支持N级下拉列表联动的控件 -
davaidgao:
不全啊,这是
Spring3.x权威开发指南 -
caizi12:
对于map绑定很是不方便,现在的做法,需要创建一User类,再 ...
浅谈 SpringMVC 数据绑定 -
joeyhuang:
不全啊..
Spring3.x权威开发指南
一 . 两个小经验
1.在定义一个类时,不要随意定义成员变量.除非它是这个类的一个属性或者在类的多个方法中要用到 它.
2.
public class Test {
public static void main(String[] args) {
byte[] b = new byte[102400*1024];
}
}
这是一个简单的程序,在写上传文件的程序时极有可能遇到这个情况.比喻说有一个文件的长度是100M. 在读取文件内容时就会这样写byte[] b = new byte[102400*1024],但是在运行时会出一个内存越界错误.在实际应用中一定要非常小心.
二 . 递归:
先看一个小例子:
public class Recursion {
public static void func() {
func();
}
public static void main(String[] args) {
func();
}
}
上面就是一个简单的递归程序,运行一定会把内存吃光,所以在使用递归时一定要加上特定的条件
下面再看几个递归的例子.
(1) .
public class YueShuTest {
//求最大公约数
public static void yueshu(int num1,int num2) {
if(num1 == num2) {
System.out.println (num1);
}
else {
yueshu(Math.abs(num1 - num2),Math.min(num1,num2));
}
}
//求二进制
public static void binary(int num) {
if(num > 0) {
binary(num / 2);
System.out.print (num % 2);
}
}
}
下面在看一个最经典的汉诺塔问题(很复杂的一个问题).
public class Hanon {
static void hanon(int n,char a,char b,char c) {
if(n == 1) {
move(1,a,c);
return;
}
hanon(n - 1,a,c,b);
move(n,a,c);
hanon(n - 1,b,a,c);
}
static void move(int n,char a,char c) {
System.out.println (n + ":" + a + "-->" + c);
}
public static void main(String[] args) {
hanon(3,'A','B','C');
}
}
看看,一个多么复杂的问题这么几行代码就搞定了.递归的威力无穷啊!
再来看一个更复杂的.
import java.io.*;
class FileWrapper extends File {
private boolean bLast = false;
private FileWrapper parent = null;
public FileWrapper(File f,boolean bLast,FileWrapper parent) {
super(f.getPath());
this.parent = parent;
this.bLast = bLast;
}
public FileWrapper getMyParent() {
return parent;
}
public boolean isLast() {
return bLast;
}
}
public class FileTree{
//第一种方法.
/*public static String makeSpaces(int level) {
StringBuffer sbf = new StringBuffer();
for (int i = 0; i < level; i++)
{
sbf.append(" ");
}
return sbf.toString();
}
public static void listFile(File f,int level)
{
if(!f.exists())
{
System.out.println ("该文件不存在!");
return;
}
System.out.println (makeSpaces(level) + f.getName());
if(f.isDirectory())
{
File[] fs = f.listFiles();
for(File file : fs)
{
listFile(file,(level + 1));
}
}
}
public static void main(String[] args)
{
File file;
if(args.length < 1)
{
file = new File(".");
}
else
{
file = new File(args[0]);
}
listFile(file,0);
}
*/
这段代码打印出来的结果如下:
//第二种方法
public static void listFile(FileWrapper fw)
{
if(!fw.exists())
{
System.out.println ("该文件不存在!");
return;
}
System.out.println (makePrefix(fw) + fw.getName());
if(fw.isDirectory())
{
File[] fs = fw.listFiles();
for (int i = 0 ;i < fs.length;i++)//File fl : fs)
{
File f1 = fs[i];
FileWrapper fw1 = null;
if(i == fs.length - 1)
{
fw1 = new FileWrapper(f1,false,fw);
}
else
{
fw1 = new FileWrapper(f1,true,fw);
}
listFile(fw1);
}
}
}
public static void main(String[] args)
{
File file;
if(args.length < 1)
{
file = new File(".");
}
else
{
file = new File(args[0]);
}
FileWrapper fw = new FileWrapper(file,true,null);
listFile(fw);
}
public static void makeParentPrefix(FileWrapper fw,StringBuffer prefix)
{
if(fw.getMyParent().getMyParent() == null)
{
return;
}
FileWrapper parent = fw.getMyParent();
if(parent.isLast())
{
prefix.append(" │");
}
else
{
prefix.append(" ");
}
makeParentPrefix(parent,prefix);
}
public static String makePrefix(FileWrapper fw)
{
if(fw.getMyParent() == null)
{
return "";
}
StringBuffer sbf = new StringBuffer();
if(fw.isLast())
{
sbf.append("─├");
}
else
{
sbf.append("─└");
}
makeParentPrefix(fw,sbf);
sbf.reverse();
return sbf.toString();
}
}
这段代码打印出来的结果如下:
三 . 要在执行ant的命令行窗口中给build.xml中的java任务执行的类传递参数,怎么做?这个问题还在探讨中...请高手指教.
发表评论
-
Ubuntu下JDK+Tomcat+MySql环境的搭建
2011-06-15 14:48 1159Ubuntu 下 JDK+Tomcat+MySql ... -
Eclipse下切换 SVN 中已经保存的用户名和密码
2009-09-22 10:28 17361. 把 C:\Documents and Set ... -
Java实现汉字转换为拼音
2006-10-31 13:15 617import java.util.HashMap;import ... -
Java中的克隆(Clone)机制
2007-08-03 09:03 637现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个 ... -
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
2008-12-16 10:32 739在多线程大师Doug Lea的贡献下,在JDK1.5中加入 ... -
Java读取Properties文件的六种方法
2009-04-16 09:34 734使用J2SE API读取Properties文件的六种方法 ... -
深入探讨java集合类
2006-08-24 20:47 725不同的集合在添加对象时的处理是不同的:Set:不允许重复,且没 ... -
java类装载器
2006-08-25 18:36 868一 . 面向接口编程. 不要面向类编程. 二 . 关于异常:如 ... -
几个Java基础知识
2006-08-25 19:18 679一 . Hashtable和HashMap Hashtab ... -
面向方面的编程(AOP)
2006-08-25 19:33 742面向对象的编程(OOP)中 ... -
Collection与UML学习
2006-09-01 19:19 704一 . 属性<property>时须注意:1. & ... -
反射和代理
2006-09-01 19:23 713一. 关于数据库.当今的数据处理大致可以分成两大类:联机事务处 ... -
Jdk1.5的新语法和一些java学习的小知识点
2006-09-01 19:30 1228一.1. 操作系统执行具体 ... -
使用DatabaseMetaData和ResultSetMetaData查看数据库信息
2006-10-07 22:26 946/**DatabaseMetaData接口查看数据库的整体综合 ... -
自己动手写数据库连接池
2006-10-07 22:28 1047在前面的文章中已经说过使用连接池的很多好处和优势,也曾讨论过怎 ... -
BASE64编码
2006-10-24 08:39 13231.HttpServletRequest: 请求 ... -
一个实现MD5的简洁的java类
2006-10-28 22:27 659一个实现MD5的简洁的java类 package test; ... -
使用Java将Word转为Html或txt!
2006-10-31 13:47 1229package org.client; // 使用Java将W ... -
理解接口
2006-11-01 14:12 550... -
正则表达式中问号等特殊字符的转义
2006-11-10 00:26 2493正则表达式中问号等特殊字符的转义 除 .$ ^ { [ ( | ...
相关推荐
递归与迭代是算法设计中两种常见的解决问题的方法,它们在Java语言中的应用广泛且具有深远的意义。递归算法通过方法内部调用自身来解决问题,它适合于可以分解为相似子问题的问题;而迭代算法则通过循环结构,不断...
本篇文章将深入探讨递归在Java语言中的应用,并通过实例来解析递归的工作原理。 首先,递归的基础是必须有一个明确的终止条件,以防止无限循环导致程序崩溃。在给定的示例中,`YueShuTest` 类展示了如何使用递归来...
Java语言中实现0-1背包的递归解法通常会使用一个二维数组dp,其中dp[i][j]表示在前i个物品中,容量为j时的最大价值。递归函数可以如下表示: ```java int knapsack(int W, int[] w, int[] v, int n) { int[][] dp ...
在编程世界中,递归和迭代是两种基本的解决问题的方法,尤其在Java语言中,它们在...在阅读“递归与迭代算法及其在JAVA语言中的应用.pdf”这份资料后,相信你将对这两者有更深入的理解,并能灵活地应用到实际项目中。
Java语言中的递归删除是一种常见的文件操作,尤其在处理文件夹结构时非常有用。递归是一种编程技术,它允许函数或方法调用自身来解决复杂问题。在这个Java程序中,递归被用来遍历和删除指定目录及其子目录中的所有...
总结来说,递归是编程中的重要概念,尤其在Java这样的面向对象语言中,它可以优雅地解决复杂问题。通过理解和应用递归,我们可以更好地掌握编程的艺术,而汉诺塔问题的递归解法则是学习这一技巧的一个良好起点。
递归是一种重要的编程概念,尤其在Java这样的面向对象语言中,它被广泛应用于解决各种复杂问题。递归指的是一个函数或方法在其定义中调用自身的过程。这种技术源自数学和计算机科学,它允许通过简化问题的规模来解决...
在Java编程语言中,递归是一种非常重要的算法思想和技术手段。递归是指一个方法直接或间接地调用自身的过程。这种自我调用的方式可以用来解决很多复杂的问题,并且通常能够使代码更加简洁和易于理解。 #### 二、...
5. **尾递归优化**:在某些编程语言中(如Scala),支持尾递归优化,即在递归调用是函数体的最后一个操作时,编译器可以重写递归调用来避免额外的栈帧分配。遗憾的是,标准的Java并不支持尾递归优化。 6. **调试...
Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理的 JSON 格式。 在 Java 中,使用...
Java集合框架是Java语言提供的一组接口和类,用于存储和操作各种数据结构,如列表(List)、队列(Queue)、集(Set)和映射(Map)。然而,标准的集合框架并没有直接提供对树结构的支持,因此我们需要自己创建。 ...
在Java编程语言中,递归同样被广泛应用,尤其是在处理文件系统操作时。 #### 一、递归算法的基本概念 递归通常涉及两个主要部分: 1. **基本情况**(Base Case):这是递归调用的结束条件。 2. **递归步骤**...
在这个实例中,我们将深入探讨如何使用Java递归实现阶乘计算,并以1到10的数字为例进行演示。 阶乘是一个数学概念,表示一个正整数n的所有小于等于n的正整数的乘积,通常表示为n!。例如,5的阶乘(5!)是5 × 4 × ...
在这个"java数据结构递归算法"主题中,我们将深入探讨递归的基本概念、如何在Java中使用递归,以及一个著名的递归应用案例——八皇后问题。 递归是函数或方法调用自身的过程。它基于一个问题的规模缩小至基本情况,...
在`MyBinaryTree2.java`和`MyBinaryTree.java`这两个文件中,可能分别实现了递归和非递归的遍历方法。你可以打开这些文件,查看代码并理解其中的逻辑,以加深对二叉树遍历的理解。此外,实践是最好的老师,你可以...
在这个场景中,我们将探讨如何使用Java语言,通过回溯法来递归实现全排列的输出。 首先,我们需要理解回溯法的基本概念。回溯法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,并在每一步中检查当前的解...
在Java编程语言中,二叉树是一种非常重要的数据结构,它由节点构成,每个节点包含一个值,并且可能有两个子节点:左子节点和右子节点。二叉树的遍历是访问每个节点的过程,通常分为三种主要方式:前序遍历、中序遍历...
在JAVA语言的学习中,理解并掌握基本语法是首要任务。这包括数据类型(如整型、浮点型、字符型和布尔型)、变量、常量的声明与使用,以及运算符的规则。例如,书中可能有涉及算术运算符(+、-、*、/、%)和关系...
本文旨在探讨如何在递归算法中运用多线程技术,以实现高效的并行计算。 #### Java多线程框架与递归算法结合 Java作为一门广泛使用的高级编程语言,其内置的多线程机制为开发者提供了丰富的工具,以便在多核架构上...
本文主要探讨如何使用Java实现经典递归算法,旨在帮助初学者理解递归的工作原理及其应用。递归算法设计的关键在于将复杂问题分解为相似的子问题,直到子问题简单到可以直接解决。这通常涉及到两个要素:递归出口和...