Java
文章平均质量分 64
Aguangg_6655_la
充电。。。
展开
-
程序员面试经典--二叉查找树节点的“下一个结点”
4.6问题:设计一个算法,找出二叉树中指定的结点“下一个”结点(也即中序后继)。可以假定每个结点都含有指向父节点的链接。思考:回忆一下中序遍历,它会先遍历左子树,然后是当前节点,接着右子树,要解决这个问题需要非常小心。假定我们有一个假想的结点,先是左子树,然后是当前结点,最后就是右子树,目标结点当然是在右子树,那么是右子树的哪一个呢?很简单,就是右子树的最左边的那个结点。在这种情况原创 2017-04-22 11:03:08 · 655 阅读 · 0 评论 -
重载“+”符号连接字符串
字符串是Java程序中最常用的一种数据结构之一。在Java中的String类已经重载的"+"。也就是说,字符串可以直接使用"+"进行连接,如下面代码所示:String s = "abc" + "ddd";但这样做真的好吗?当然,这个问题不能简单地回答yes or no。要根据具体情况来定。在Java中提供了一个StringBuilder类(这个类只在J2SE5及以上转载 2017-04-06 19:45:08 · 915 阅读 · 0 评论 -
程序员面试经典--空格替换
1.4问题:编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串尾部有足够的空间存放新字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)思想:扫描两次,第一次统计多少空格;第二次,反向编辑字符串,监测到空格则将%20插入,若不是,就复制原字符。import java.util.*;public class repla原创 2017-04-06 18:21:48 · 345 阅读 · 0 评论 -
程序员面试经典--检查二叉树是否平衡
4.1问题:实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个结点,其两棵子树的高度差不超过1.思考:可以直接递归访问整颗树,计算每个结点的两棵子树的高度。 public static int getHeight(Node root){ //获取二叉树的深度 if(root == null){ return 0;//终止条件 } retur原创 2017-04-15 22:47:50 · 640 阅读 · 0 评论 -
java--从txt文件中读取完全二叉树数据建立二叉树并打印出遍历结果
详细看注释:import java.io.*;import javax.swing.JOptionPane;import java.util.*;/** * 功能:读入文件里的数据存入二叉树中,然后进行3种方式的遍历 * * 参考资料0:数据结构(C语言版)严蔚敏 */ /** * 外部类:节点 * * @author ocaicai@yeah.net @date原创 2017-04-15 21:26:45 · 3246 阅读 · 1 评论 -
java字节文件输入流读文件
在下面程序中,读取一个文本文件,并将其显示到对话框上。在编写程序前必须知道两件事:1、怎样把一个流与一个文件联系起来。2、用什么方法把从文件中读取的数据显示到对话框中。import java.io.*;import javax.swing.JOptionPane;class Example8_1{ public static void main(String args[]){原创 2017-04-15 21:22:49 · 1499 阅读 · 0 评论 -
Java中字符串为什么不以\0结尾
其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了。学过C/C++的人都有一种固定的思维模式,凡是字符串都是以\0结束,其实C++中未必,不信你查查string这个泛型类,为了与C语言兼容性,它里面有一个方法c_str()就是返回以\0结束的字符串。转载 2017-04-06 17:18:16 · 2029 阅读 · 0 评论 -
程序员面试经典--判断变位词
1.3问题:给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。方法一:import java.util.*;public class sort{ public static void main(String args[]){ String s = new String("abcdaefghijklmnopqrstuvwxzya"); St原创 2017-04-06 11:49:19 · 727 阅读 · 0 评论 -
Java增强型for循环
For-Each循环 For-Each循环也叫增强型的for循环,或者叫foreach循环。 For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。 For-Each循环的加入简化了集合的遍历。 其语法如下: for(type element: array) { System.out.p转载 2017-04-06 10:57:28 · 385 阅读 · 0 评论 -
java中的static总结
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法。 · 它们只能访问static数据。 · 它们不能以任何方式引用this 或super。class Simple { static void go() {转载 2017-04-06 09:20:41 · 315 阅读 · 0 评论 -
图与邻接链表--极简形式
这里用Java简单实现了一个4个结点的有向、无权重、无数值的简易图。如下:import java.util.*;// 邻接表中表对应的链表的结点class ENode { int ivex; // 该边所指向的顶点的位置 ENode nextEdge; // 指向下一条弧的指针 ENode(int a){ ivex=a;nextEdge=null; }}原创 2017-04-18 22:09:17 · 870 阅读 · 0 评论 -
isNull(str), isEmpty(str)和 str = ""的区别
1。isnull()Null 值指出变量不包含有效数据。Null 与 Empty 不同,后者指出变量未经初始化。Null 与零长度字符串 ("") 也不同,零长度字符串往往指的是空串。重点 使用 IsNull 函数可以判断表达式是否包含 Null 值。在某些情况下想使表达式取值为 True,例如 IfVar=Null 和 IfVar下面的示例利用 IsNull 函数决定变量是否转载 2017-04-06 20:03:45 · 745 阅读 · 0 评论 -
程序员面试经典--字串压缩
1.5问题:利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。思考:怎样降低时间复杂度,提高代码效率。防止做无用功,可先判断压缩串长度是否大于原串,若是则返回原串,若否则返回压缩串。import java.util.*;class compress{ public原创 2017-04-06 20:39:40 · 554 阅读 · 0 评论 -
错误:未报告的异常错误,必须对其进行捕获或声明以便抛出
错误:未报告的异常错误,必须对其进行捕获或声明以便抛出出现错误:是因为没有对异常进行捕获或声明 首先说一下Java 中throws的作用:假如函数部分有不合法的异常,例如分母为0:import java.util.Scanner;public class Helloexcept{ public static void main(St转载 2017-05-04 10:59:46 · 7841 阅读 · 0 评论 -
程序员面试经典--判断二叉查找树
4.5问题:实现一个函数,检查一棵树是否为二叉查找树。思考:方法一:看到此题,闪过的第一个想法就是中序遍历,将所有的元素复制到数组中,然后检查数组是否有序。这种解法要多用一点儿内存,大部分情况下都没问题。唯一的问题是,它无法处理树中的重复值。例如,该算法无法区分下面这两棵树,因为这两者的中序遍历是一样的。Valid BST [20.left = 20]Invalid BST [原创 2017-04-21 17:15:46 · 736 阅读 · 0 评论 -
Java包裹类
包装类,通过包装类可以把基本数据类型变为一个对象来使用比如int i = 5这是一个基本数据类型,并不是对象而Integer i = new Integer(5);则是一个对象,就是一个object类型,可以当作对象来处理了这个主要是如果你用到arraylist等只能传入object类型参数的类的时候,就需要用到包装类对基本数据类型进行一下包装。Java中许多存储和管理对象转载 2017-04-21 16:17:58 · 2079 阅读 · 0 评论 -
程序员面试经典--创建二叉树层结点链表
4.4问题:给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为D,则会创建出D个链表)。思考:1、我们可以将前序遍历稍加修改,将leve+1传入下一个递归调用。下面是使用深度优先搜索的实现代码。 public void createLevelLinkedList(Node root,ArrayList> lists,int level){//先序原创 2017-04-21 14:45:10 · 588 阅读 · 0 评论 -
ArrayList和LinkedList的区别
ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。转载 2017-04-21 09:23:14 · 362 阅读 · 0 评论 -
程序员面试经典--创建最小二叉查找树
4.3问题:给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉查找树。思考:要创建一棵高度最小的树,就必须让左右子树的节点数量越接近越好,也就是说,我们要让数组中间的值成为根结点,这么一来,数组左边一半就成为左子树,右边一半成为右子树。运用createMinimalBST方法,递归的方式,这个方法会传入数组的一个区段,并返回最小树的根结点。该算原创 2017-04-20 19:17:35 · 625 阅读 · 0 评论 -
深度优先搜索和广度优先搜索
(DFS)深度优先搜索,伪代码如下:void DFS_search(Node root){ if(root==null) return; visit(root);//例如打印该结点。 root.visited=true;//visited 布尔类型变量,用于标识该结点是否被访问过。 foreach(Node n in root.adjacent){//遍历该结点的所有邻接结点。 i原创 2017-04-20 14:06:52 · 509 阅读 · 0 评论 -
java中queue的使用
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Q转载 2017-04-20 11:06:00 · 906 阅读 · 0 评论 -
程序员面试经典--有向图路径验证
4.2问题:给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。思考:只需通过图的遍历,比如深度优先搜索或广度优先搜索等,就能解决这个问题。我们从两个节点的其中一个出发,在遍历过程中,检查是否找到另一个结点。在这个算法中,访问过的结点都应标记为“已访问”,以免重复访问结点。关于邻接表与图的基本实现与操作:import java.util.*;/** * 邻原创 2017-04-20 10:17:04 · 920 阅读 · 0 评论 -
Java中length()、length和size()的区别
1 Java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看! 这个例子来演示这两个转载 2017-04-20 10:06:15 · 667 阅读 · 0 评论 -
邻接链表与图及其相关操作--Java
找了好久的关于图的邻接链表存储结构,这个是最满意的。一来方便自己以后查找使用,二来分享给大家。package Graph;import java.util.ArrayList;import java.util.List;/** * 邻接表实现的图 * @author ctk * */public class ListGraph { private List gNodes原创 2017-04-18 22:03:13 · 1400 阅读 · 0 评论 -
图的存储结构与搜索
图与搜索图是什么 图,顾名思义,就是一张大大的网,网中的每个节点都与另外一个节点直接或者间接的联系。互联网就是一个大大的图,从A到B到C经过的路由,就是图的搜索算法。 要给图下一个定义,那就是在众多离散节点中可以产生回路的数据结构。比之线性数据结构的单线特性,树形结构的多路分叉特性,图的最大特点就是有回路的树形结构。图可以表示很多具体的事物,它是现实转载 2017-04-18 21:21:52 · 862 阅读 · 0 评论 -
程序员面试经典--链表回文判断
2.7问题:编写一个函数,检查链表是否为回文。思考:若链表长度未知,可用快慢runner指针的方法,迭代访问链表将链表的前半部分入栈,然后将栈内的数据与链表的后半部分进行对比。import java.util.*;//节点类class Node { protected Node next; //指针域 protected int data;//数据域 public N原创 2017-04-10 10:50:42 · 413 阅读 · 0 评论 -
程序员面试经典--链表环路检测与入口结点返回
2.6问题:给定一个有环链表,实现一个算法返回环路的开头结点。思考:第一:监测链表是否存在环路。有一种简单的方法叫做fastrunner/slowrunner法。fastruner一次移动两步,slowrunner一次移动一步。如果存在环路,最终必然会碰到一起。第二:什么时候碰到一起? 1、slowrunner处于环路中的0步位置; 2、fastrunner处于原创 2017-04-09 19:33:15 · 817 阅读 · 0 评论 -
程序员面试经典--双链表求和
2.5问题:给定两个用链表表示的数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。思考:递归思想,非常巧妙,需仔细分析思考,递归多次,每次都会创建一个节点,反馈给上一级,上一级的链表结点指针指向下一级创建的结点。当多级递归完成时,就会返回这个链表的首结点。完成运算。import java.util.*;//节点类原创 2017-04-09 16:03:32 · 496 阅读 · 0 评论 -
程序员面试经典--链表分割
2.4问题:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排列在大于或等于x的结点之前。思考:可以直接创建两个链表,一个链表存放小于x的元素,另一个链表存放大于或等于x的元素。迭代访问整个链表之后,合并两个链表即可。import java.util.*;//节点类class Node { protected Node next; //指针域 protect原创 2017-04-09 11:14:25 · 424 阅读 · 0 评论 -
程序员面试经典--删除结点(仅能访问该结点)
2.3问题:实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。思考:题目给出,访问不到链表首结点,只能访问那个待删除结点。可以将该结点的后继结点数据拷贝到当前结点,然后删除这个后继结点。import java.util.*;//节点类class Node { protected Node next; //指针域 protected int data;//原创 2017-04-08 20:56:42 · 414 阅读 · 0 评论 -
程序员面试经典--链表节点查找
2.2问题:实现一个算法,找出单向链表中倒数第k个节点。链表数据:import java.util.*;//节点类class Node { protected Node next; //指针域 protected int data;//数据域 public Node( int data) { this.data = data; } //显示此节点 pu原创 2017-04-08 19:32:09 · 542 阅读 · 0 评论 -
程序员面试经典--删除链表重复节点
2.1问题:编写代码,移除未排序链表中的重复节点。方法一:可使用临时缓冲区情况下,可用简单的散列表记录节点并判断是否重复。import java.util.*;//节点类class Node { protected Node next; //指针域 protected int data;//数据域 public Node( int data) { this.dat原创 2017-04-08 16:52:20 · 495 阅读 · 0 评论 -
Hashtable与ArrayListTest编译问题:使用了未经检查或不安全的操作;请使用 -Xlint:unchecked 重新编译
ArrayList staff = new ArrayList();Hashtable table = new Hashtable();在编译java源文件时,如果你的jdk是1.5或者以上,会出现“使用了未经检查或不安全的操作;请使用 -Xlint:unchecked 重新编译。”这样的警告,原因是JDK 1.5中集合类的实例创建方式与JDK 1.4的有一些不同,JDK 1.5 里面原创 2017-04-08 16:30:56 · 3455 阅读 · 0 评论 -
错误:类是公共的,应在名为的文件中声明
程序内部类children是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以在不做其他变动的情况下,最简单的解决办法是将public class改为public static class.原创 2017-04-08 11:39:03 · 7553 阅读 · 0 评论 -
Java的Hashtable类
哈希表是一种重要的存储方式,也是一种常见的检索方法。其基本思想是将关系码的值作为自变量,通过一定的函数关系计算出对应的函数值,把这个数值解释为结点的存储地址,将结点存入计算得到存储地址所对应的存储单元。检索时采用检索关键码的方法。现在哈希表有一套完整的算法来进行插入、删除和解决冲突。在Java中哈希表用于存储对象,实现快速检索。 Java.util.Hashtable提供了种方法让用户使用哈转载 2017-04-08 10:21:41 · 377 阅读 · 0 评论 -
程序员面试经典--返回栈中最小元素
3.2问题:请设计一个栈,除去pop与push方法,还支持min方法,可返回栈元素中的最小值。push、pop和min三个方法的时间复杂度必须为O(1)。思考:一种解法是,在Stack类里添加一个int型的minvalue。当minvalue出栈时,我们会搜索整个栈,找出新的最小值。可惜,这不符合入栈出栈时间复杂度O(1)的要求。另一种解法,就是每次入栈都要记下这个状态下的最小值。原创 2017-04-11 16:54:38 · 750 阅读 · 0 评论 -
Java中ArrayList类的用法
Java中ArrayList类的用法1、什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和IList接口 灵活的设置数组的大小2、如何使用ArrayList 最简单的例子: ArrayList List = new ArrayLi转载 2017-04-11 18:16:44 · 269 阅读 · 0 评论 -
Java中try、catch、finally的用法
Java中try,catch,finally的用法,以前感觉还算熟悉,但看到一篇博文才有更深点的理解,总结网友博客如下。Java异常处理的组合方式:1.try+catch 运行流程:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句 2.try+catch+finally 运行流程:运行到try块中,如果有异常抛出,则转到原创 2017-04-14 15:52:49 · 8501 阅读 · 1 评论 -
程序员面试经典--巧用散列表
问题1.1:实现一个算法,确定一个字符串的所有字符是否全都不相同。import java.util.*;public class StrArray{ public static void main(String args[]){ StringBuffer s = new StringBuffer("abcdaefghijklmnopqrstuvwxyz"); if(i原创 2017-04-05 21:40:05 · 444 阅读 · 0 评论 -
程序员面试经典--旋转矩阵
1.6问题:给定一副由N*N矩阵表示的图像,其中每个像素的大小为4字节,编写一个方法,将图像旋转90°。不占用额外的内存空间能否做到?思考:假设顺时针旋转90°。不占额外内存空间的情况下,一个一个索引进行交换,将上边移到右边,右边移到下边,下边移到左边,左边移到上边。时间复杂度为O(n^2),已是最优做法。import java.util.*;class rotate{ publi原创 2017-04-06 22:13:55 · 550 阅读 · 0 评论