摘要: 首先,考虑编写iterator,我们需要基于哪几个方面的考虑:由于迭代器会访问List的私有域,因此,可以有2种方式: 一种的改变List的域的可见性,让其变成public或friendly(默认的可见性,即包可见性)的,不过这违反了良好的面向对象编程的羁绊原则,它要求数据尽可能的隐蔽。 另外一种是为List添加一个内部类或者嵌套类,然后我们来看这2种类的区别。首先我们需要先理解一下2种类的概念:将一个类放入另一个类的内部,当这个类是static的,表示嵌套类,否则这个类就是内部类。1,嵌套类嵌套类是外部类的一部分,所以可以访问外部类,特性:嵌套类访问外部类: 不能直接访问外部类的非静态成.. 阅读全文
posted @ 2013-06-10 10:59 sqtds 阅读(1010) 评论(0) 推荐(0) 编辑
摘要: 首先我们需要区分的是什么是有符号数和无符号数。有符号和无符号的区别是一个有符号位,另一个没有符号位.没有符号位的数字只能有0和正值,有符号位的数字可以有正零,负零和正数负数.从这里可以看出,有符号和无符号的区别就是是否能表示负数。然后我们再来理解java虚拟机所支持的所有整数数据类型-byte,short,int和long,他们都是带符号的二进制补码。那么为什么会采用二进制补码呢?首先我们还是来看二进制补码的概念:负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的.即若要用补码系统表示 -5,首先要将 5 的二进制进行反相运算,再加 1。0000 0101 (5) -----11 阅读全文
posted @ 2013-02-25 21:51 sqtds 阅读(1583) 评论(0) 推荐(0) 编辑
摘要: 先看看jvm规范定义的标准结构:首先我们看看类文件是如何被编译生成的。 从上图中可以看出通过javac编译代码分为3个步骤。我们再来分析这3个步骤:1,分析和输入到符号表(Parse and Enter)Parse的过程为词法和语法分析。词法分析完成的是将代码字符串转变为token序列;语法分析完成的是根据语法由token序列生成抽象语法树。Enter过程将符号输入到符号表。通常包括确定类的超类型和接口,根据需要添加默认的构造器,将类中出现的符号输入到自身的符号表中。2,注解处理(Annotation Processing)改步骤用于处理用户自定义的annotation。3,语义分析和生成cl 阅读全文
posted @ 2013-02-23 14:53 sqtds 阅读(1063) 评论(0) 推荐(0) 编辑
摘要: 首先我们分析下面的代码:int i = 0;public int getNextId(){ return i++;}它的执行步骤为:1,jvm首先在main memory(jvm堆)给i分配一个内存存储场所,并存储其值为0.2,线程启动后,会分配一片working memory 区(通常是操作数栈),当线程执行到return i++时,jvm并不是简单的一个步骤就可以完成的。i++在jvm中分为装载i,读取i,进行i++操作,存储i及写入i的5个步骤。装载i 线程 发起一个装载i的请求给jvm线程执行引擎,引擎接收请求后向main memory发起一个read i的指令。 当read i执行. 阅读全文
posted @ 2013-02-21 22:15 sqtds 阅读(610) 评论(0) 推荐(0) 编辑
摘要: I studied Electrical Engineering in undergrad and the only programming languages we've had to use in EE were C/C++, Assembly, and Matlab. After going to aStartupWeekendevent and getting interested in software dev and computer science I decided I wanted to get my hands dirty and jump in the field 阅读全文
posted @ 2013-02-19 17:13 sqtds 阅读(221) 评论(0) 推荐(0) 编辑
摘要: We programmers are weird creatures. We love writing code. But when it comes to reading it we usually shy away. After all, writing code is so much more fun, and reading code is hard — sometimes almost ... 阅读全文
posted @ 2013-01-16 23:56 sqtds 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 本节介绍两种插入排序方法:直接插入排序和希尔排序。 直接插入排序基本思想 1、基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从... 阅读全文
posted @ 2013-01-16 23:26 sqtds 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序:废话不多说,直接上代码,注意2中冒泡方法的不同。 package com.sqtds.algorithm.sort;/** * User: sqtds * Date: 13-1-15 * Time: 下午3:03 */public class Bubble { public static void sort(int[] array){ int i ,j ;... 阅读全文
posted @ 2013-01-16 23:08 sqtds 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 谜题1,奇数性 public static boolean isOdd(int i ){ return i%2==1;}当 i 是一个负奇数时,i % 2 等于-1 而不是1, 因此 isOdd 方法将错误地返回 false。为了防止这种意外,请测试你的方法在为每一个数值型参数传递负数、零和正数数值时,其行为是否正确。 这个问题很容易订正。只需将 i % 2 与 0 而不是与1 比较,并... 阅读全文
posted @ 2013-01-10 23:49 sqtds 阅读(272) 评论(0) 推荐(0) 编辑
摘要: Writing good commit messages Good commit messages serve at least three important purposes: 好的提交消息至少服务于3个重要的目的: To speed up the reviewing process. 加速代码审查的进程。 To help us write a good re... 阅读全文
posted @ 2013-01-07 22:19 sqtds 阅读(250) 评论(0) 推荐(0) 编辑