1、什么是泛型 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。 2、一个小例子 import java.util.ArrayList; import java.util.List; public static void main(String[] args) { List list = new ArrayList(); list.add("hello"); list.add("hallo"); list.add(1); for (int i = 0; i < list.size(); i++) { String str = (String) list.get(i); Sy 继续阅读 >>


李猛 17/11/30 21:14:17
一个思考题 在利用DFS和BFS遍历图时,有没有考虑过能不能在出队(栈)时访问元素呢?访问在前有什么好处呢? BFS依靠队列来实现,以BFS来简单说一下吧 访问在前 void BFS(Graph g , int v0) { visit(v0); //访问在前 visited[v0] = 1; InitQueue(&Q); EnterQueue(&Q,v0); //入队 while(! Empty(Q)){ DeleteQueue(&Q,&v); //出队 w = FirstAdjVex(g,v); //图g中顶点v的第一个邻接点 while(w!=-1){ if(!visited(w)){ visit(w); visited[w] = 1; Ente 继续阅读 >>


李猛 17/11/26 23:48:57
定义 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。 相关基本概念 路径:从树中一个结点到另一个结点之间的分支序列构成两个节点间的路径。 路径长度:路径上分支的条数成为路径长度。 树的路径长度:从树根到每个结点的路径长度之和称为树的路径长度。 结点的权:给树中结点赋予一个数值,该数值称为结点的权。 带权路径长度:结点到树根间的路径长度与结点权的乘积,称为该结点的带权路径长度。 树的带权路径长度:树中所有叶子结点的带权路径长度之和,记为WPL。 最优二叉树:在叶子个数n以及各叶子的权值Wk确定的条件下,树的带权路径长度WPL值最小的二叉树称为最优二叉树。 哈夫曼树的建立 (1)初始化:根据给定的n个权值,构造n棵二叉树的森林集合F={T1,T2,…,Tn},其中每棵二叉树只有一个权值为Wi的根节点,左右子树均为空。 (2)找最小的树并构造新的树:在森林集合F中选取两颗根的权值最小的树作为左右子树构造一棵新的二叉树,新二叉树的根结点为新增 继续阅读 >>


李猛 17/11/20 22:56:54
线索二叉树 结点结构定义如下: 若结点有左子树,则LChild域仍指向其左孩子; 否则,LChild域指向其某种遍历序列中的直接前驱结点。 若结点有右子树,则RChild域仍指向其右孩子; 否则,RChild域指向其某种遍历序列中的直接后继结点。 Ltag 0: LChild域指示结点的左孩子 1: LChild域指示结点的遍历前驱 Rtag 0: RChild域指示结点的右孩子 1: RChild域指示结点的遍历后继 线索二叉树的结点结构: 二叉树的中序线索化 void Inthread(BiTree root) { if(root!=NULL) { Inthread(root->LChild);/*线索化左子树*/ if(root->LChild == NULL) { root->LChild = pre; root->Ltag = 1; /*置前驱线索*/ } 继续阅读 >>


李猛 17/11/12 23:52:20
今天上课第一次接触JavaFX,一个简单的小程序,运行时出现了Gtk-WARNING的警告,虽然不影响运行,但是看着不是很爽。 具体的警告为: Gtk-WARNING **: 无法在模块路径中找到主题引擎:“murrine” 如下图所示 提示是无法找到主题引擎,那么可能是和主题有关。 当前使用主题是我在网上找的主题,我尝试把系统主题修改为系统默认主题后。 再次运行,刚刚出现Gtk-WARNING不再出现。 再回到Gtk-WARNING **: 无法在模块路径中找到主题引擎:“murrine” 既然无法找到主题引擎,那么我自己装一个主题引擎不就行了嘛。 网上有好多关于解决ubuntu的解决方案: 核心就是安转装一个软件包 sudo apt-get install gtk2-engines-murrine 但是在fedora下并没有找到相应的软件包,我通过下载源码也没有成功。 后来,找到fedora该软件包的名为gtk-murrine-engine 接下来就简单了 sudo dnf install gtk-murrine 继续阅读 >>


李猛 17/11/09 22:22:42
一、File类 File类意图提供一种抽象,这种抽象指不依赖机器的方式来处理很多依赖于机器的文件和路径名的复杂性。 该类中包含许多文件属性的方法,以及重命名和删除文件和目录的方法。 但是不包含读写文件内容的方法。 File类的构造方法: 1、通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。 File(File parent, String child); 2、通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。 File(String pathname) 3、根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 File(String parent, String child) 4、通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。 File(URI uri) What is URI ? 统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对 继续阅读 >>


李猛 17/11/07 22:20:58
一、什么是异常 异常是一种对象,表示阻止正常进行程序执行的错误或者情况,包括数组下标越界、除数为零、网络连接失败、非法参数、空指针异常、文件找不到等。 二、异常的种类 这些异常类可分为三种主要类型:系统错误、异常和运行时异常。 系统错误(system error) 由Java虚拟机抛出,用Error类表示。Error类描述的是内部系统错误。这样错误很少发生。如果发生,除了通知用户以及尽量稳妥地终止程序外,几乎什么也不能做。 如: LinkageError - 一个类对另一个类有某种依赖性,但是编译前者在后,后者进行了修改,变得不兼容 VirtualMachineError - Java虚拟机崩溃,或者运行所需的资源已经耗尽 异常(exception) 用Exception类表示,描述的是由程序和外部环境所引起的的错误,这些错误能被程序捕获和处理。 如: ClassNotFoundException - 试图调用不存在的类 IOException - 同输入/输出有关的操作,如无效输入、读文件超过文件尾、打开一个不存在的文件等。 继续阅读 >>


李猛 17/11/05 21:26:31
问题描述: 魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂,但他的语言是可以逐步解释成人能听懂的语言的,因为它的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1) α→β1β2 ••• βn (2)(θδ1δ2 •••δn)→θδnθδn-1 ••• θδ1θ 在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把它的话解释成人能听懂的话。 (1)基本要求: 规则条数、规则内容固定(设定小写字母为终结符,大写字母为非终结符) 例如: (1) B→tAdA (2) A→sae B(ehnxgz)B=tsaedsaeezegexenehetsaedsae (2)扩展要求: 1)规则条数、内容不固定; 2)将终结符与汉字建立对应关系进行翻译 例如: t d s a e z g x n h 天 地 上 一只 鹅 追 赶 下 蛋 恨 则魔王说的 继续阅读 >>


李猛 17/10/22 20:49:39
什么是HackMD HackMD 是一款支持多国语言版本的Markdown写作与分享知识的最佳方式,主要功能特色有跨平台、快速编辑、内嵌代码、引用、提供特殊语法的自动完成与提示、笔记分享与权限设置、大纲目录模式等。 特点: 1、跨平台: 可以在任何装置用浏览器打开「HackMD」网页,就可以在不同系统、不同萤幕上进行笔记了,在电脑、平板甚至是手机都适用。你不一定需要登录,可以直接在「 HackMD 」新增笔记进行编辑,而编辑完成后会留下记录在浏览器,你也可以记下网址,都能在以后回头修改。 2、多人实时协作 只要打开的是同一个网址,很多人就可以同时进行文档的编辑,当然你也可以设置权限来防止陌生人随意编辑你的文档。    我进行了一个有趣的测试,在电脑上新建一个笔记,然后将网址发送到我的手机和ipad,然后三台设备可以同时进行编辑这个文档。 上图是在ipad上的内置浏览器Safari打开后的界面,右上角显示当前有3个人在当前的笔记,其中一个登录用户和两个访客用户。 这里设置了所有人都可以编辑,所以访客身份登录可以编辑此笔记。编辑的内容会 继续阅读 >>


李猛 17/10/20 23:55:06
java中对象数组初始化和排序 由于今天上机的一道题感觉比较坑,所以总结一下。 题目: (Y. Daniel Liang英文版八版 P232:6.19)( Y. Daniel Liang英文版第10版P279:7.17)(Sorting students) Write a program that prompts the user to enter the number of students, the students’ names, and their scores, and prints student names in decreasing order of their scores. 译:编写一个程序,提示用户输入学生的个数、学生的姓名和他们的成绩,然后按照学生成绩的降序打印学生的姓名。 分析:这题很简单,核心就是排序。首先要把各个人的数组存下来,然后进行排序,当然可以写一个冒泡排序来实现。但是,既然Arrays类里面有排序的方法,为什么不尝试使用一下呢?然后照着这个思路,遇到了不少bug。。。 对象数组的初始化 初始化的必要性 继续阅读 >>


李猛 17/09/26 21:32:01