摘要: "equals(Object obj)" and "hashCode()" should be overridden in pairsAccording to the Java Language Specification, there is a contract between equals(Ob... 阅读全文
posted @ 2014-04-22 14:17 D.Wang 阅读(2018) 评论(0) 推荐(0) 编辑
摘要: Thread.run() and Runnable.run() should not be called directly multithreadingThe purpose of the Thread.run() and Runnable.run() methods is to execute c... 阅读全文
posted @ 2014-04-22 11:54 D.Wang 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 缓冲区几个基本概念:position, 当前位置属性limit, 上界属性, put()/get() 时索引位置不允许超过上界值, put()超过上界则抛出BufferOverflowException(溢出), get() 超过上界则抛出BufferUnderflowException(暗流)capacity, 缓冲区总容量.mark, 保存的位置值, 通过mark() 设置, 设置之后可以通过reset()返回到这个位置mark = 0 || buf.position != 0) { buf.flip(); out.write(buf); buf.compact(); // I... 阅读全文
posted @ 2014-04-11 17:57 D.Wang 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 选择排序效率是冒泡的2倍。冒泡算法描述:在解释冒泡排序算法之前,先来介绍把10个数(放在数组A中)中最大的那个数放在最后位置上的一种算法。算法描述如下:(1)从数组A[1]到A[10],把相临的两个数两两进行比较。即A[1]和A[2]比较,比较完后A[2]再与A[3]比较,……最后是A[9]和A[10]比较。(2)在每次进行比较的过程中,如果前一个数比后一个数大,则对调两个数,也就是说把较大的数调到后面,较小的调到前面。比如在第一次的比较中,如果A[1]比A[2]大则A[1]和A[2]的值就互换。下图用6个数据来说明以上的算法。假设6个数据是:A[]=5 7 4 3 8 6A[1] A[2] 阅读全文
posted @ 2014-03-10 23:42 D.Wang 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 1. HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。2. HashMap的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。 从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。 源码如下: 阅读全文
posted @ 2014-03-10 23:14 D.Wang 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 说先我们来看一段示例代码:01 public void start(int interval,final boolean beep) {0203 // Inner Class04 class TimePrinter implements ActionListener {0506 @Override07 public void actionPerformed(ActionEvent event) {08 Date now = new Date();09 System.out.println(“At the tone, the time is “ +... 阅读全文
posted @ 2014-03-10 22:01 D.Wang 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 一个线程对象生成 后,如果要产生一个执行的线程,就一定要调用它的start()方法.在介绍这个方法时不得不同时说明run方法.其实线程对 象的run方法完全是一个接口回调方法,它是你这个线程对象要完成的具体逻辑.简单说你要做什么就你在run中完成,而如何做,什么时候做就不需要你控制 了,你只要调用start()方法,JVM就会管理这个线程对象让它产生一个线程并注册到线程处理系统中。 从表面上看,start()方法调用了run()方法,事实上,start()方法并没有直接调用run方法.在JDK1.5以前 start()方法是本地方法,它如何最终调用run方法已经不是JAVA程序员所能了解的.. 阅读全文
posted @ 2014-03-10 21:41 D.Wang 阅读(1765) 评论(0) 推荐(0) 编辑
摘要: 敏捷软件开发 Agile software Development 敏捷开发是一种软件开发方法,基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作。 敏捷宣言的诞生: 2001年2月11日到13日,17位软件开发领域的领军人物聚集在美国犹他州的滑雪胜地雪鸟(Snowbird)雪场。经过两天的讨论,“敏捷”(Agile)这个词为全体聚会者所接受,用以概括一套全新的软件开发价值观。这套价值观,通过一份简明扼要的《敏捷宣言》,传递给世界,宣告了敏捷开发运动的开始。 敏捷软件开发宣言 我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观: ... 阅读全文
posted @ 2014-01-02 10:32 D.Wang 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 同步器是一些使线程能够等待另一个线程的对象, 以允许他们协调工作.同步器的种类 CountDownLatch, Semaphore, CyclicBarrier and Exchanger.CountDownLatch倒计数同步器是一个一次性障碍, 允许一个或多个线程等待一个或多个其它线程做完某件事情.调用CountDownLatch(int number)构造器初始化计数.在等待线程上调用CountDownLatch.await()以阻塞线程.在工作线程上调用CountDownLatch.countDown()以减少计数, 当计数为0时激活其它所有等待线程.在实际工作中根据业务逻辑的复杂度, 阅读全文
posted @ 2013-12-31 18:07 D.Wang 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 在1.5之后的java版本中使用ScheduledExecutorService替代了老旧的Timer.ScheduledExecutorService的实现类是ScheduledThreadPoolExecutor, 一个具备Schedule task功能的ThreadPoolExecutor.ScheduledExecutorService.submit(..) execute(..) invokeAll(..) 等方法与ExecutorService完全相同.ScheduledExecutorService.schedule(Callable callable, long delay, 阅读全文
posted @ 2013-12-31 17:05 D.Wang 阅读(173) 评论(0) 推荐(0) 编辑