Java
文章平均质量分 51
youngsend
这个作者很懒,什么都没留下…
展开
-
Leetcode: Sort List (Java)
要求时间复杂度是O(nlogn),空间是constant space。想一下,平均时间复杂度满足这个的只有快速排序,归并排序和堆排序。因为是单链表,排除快速排序。堆需要建树,我也排除。因而我选择归并排序。 1. 首先要讲链表在中间切开,为了在一次循环中找到第二个子链表的head,我设置了count用以搜寻表尾,secondhead用以指向第二个子链表的头,beforesecond用以指向secon原创 2015-05-27 14:15:48 · 392 阅读 · 0 评论 -
《Thinking in Java》Fourth Edition中文版笔记
第5章 初始化与清理在Java(和C++)里,构造器是强制重载方法名的另一个原因。既然构造器的名字已经由类名所决定,就只能有一个构造器名。如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际参数类型就会被提升。char型略有不同,如果无法找到恰好接受char参数的方法,就会把char直接提升至int型。如果传入的实际参数较大,就得通过类型转换来执行窄化转换。如果不这样做,编译器就原创 2015-08-16 22:55:36 · 2484 阅读 · 0 评论 -
《Effective Java》Second Edition中文版笔记(完整)
第2章 创建和销毁对象原创 2015-09-09 14:30:47 · 4582 阅读 · 1 评论 -
《Data Structures and Algorithm Analysis in Java》Second Edition中文版笔记
第3章 表、栈和队列3.2 表ADT3.2.2 简单链表在表的前端添加项或删除第一项的特殊情形此时也属于常数时间的操作,当然要假设到链表前端的链是存在的。只要我们拥有到链表最后节点的链,那么在链表末尾进行添加操作的特殊情形(即让新的项成为最后一项)可以花费常数时间。因此,典型的链表拥有到该表两端的链。保留指向最后节点的节点的第3个链的想法行不通,因为它在删除操作期间也需要更原创 2015-08-31 16:42:25 · 2170 阅读 · 0 评论 -
Leetcode: Binary Tree Right Side View (Java)
树的题是最简单的,因为递归是最简单的一种思路。题目在这里。思路就是合并左子树和右子树各自返回的最右List。 贴代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeN原创 2015-05-25 11:22:53 · 507 阅读 · 0 评论 -
适配器(Adapter)设计模式和接口实现完全解耦
这个例子来自《Java编程思想》第9章接口的第3节完全解耦。假设我们有一个接口Processor和一个类Apply:public interface Processor { ... }public class Apply { public static void process( Processor p ) { ... }}Apply.process()方法将Processor接口作为参原创 2015-07-03 21:56:06 · 1064 阅读 · 0 评论 -
对第14章类型信息中RegisteredFactories.java的理解
先摘录Factory.java和RegisteredFactories.java的部分代码(虚线分隔):package typeinfo.factory;public interface Factory<T>{ T create();}// ---------------------------------------------------------class Part {原创 2015-07-12 11:44:36 · 622 阅读 · 0 评论 -
Leetcode: Evaluate Reverse Polish Notation (Java)
考察栈的基本操作。之所以还要写这一篇,是因为Java中Stack类是继承Vector的,这是不合理的,栈当然不应该有按index取值的功能!在Stack类文档里有这句话:A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementatio原创 2015-05-26 15:58:34 · 380 阅读 · 0 评论 -
Leetcode: Find Minimum in Rotated Sorted Array I & II (Java)
两道题,一道是无重复元素的有序数组,另一道是有重复元素的有序数组。虽然经过旋转,但是有序数组仍然应该使用二分查找。二分查找仍然是简单的递归思想。第二题的边界条件要多一些。第一题:public class Solution { public int findMin(int[] nums) { return findMinRange(nums, 0, nums.length-1)原创 2015-05-25 20:04:31 · 442 阅读 · 0 评论 -
Leetcode: Add and Search Word - Data structure design (Java)
最近尝试完全脱离C++,转而只用java刷题。这是我用java做出的第一道树。题目在这里。说几点做题思路。 1. 暴力用Hashtable存单词,显然浪费空间,每个字母每个位次应该只存一次。暴力用Regex匹配,只适用于Hash字典。每个字母每个位次只存一次,在脑子里想一下,就能想到这就是要建一棵26叉树。 2. TreeNode除了字母值和大小为26的TreeNode数组外,还应包含一个整数m原创 2015-05-24 19:58:57 · 1204 阅读 · 0 评论 -
Leetcode: Rotate Array (Java)
Java中数组复制不能直接使用赋值操作,赋值操作仅使同一个数组对象多了一个名称,对新名称的操作仍然在原数组对象上操作,容易出错。为了产生新的数组对象,可以使用Arrays类的copyOfRange方法。题目是这个。贴代码:import java.util.Arrays;public class Solution { public void rotate(int[] nums, int k)原创 2015-05-25 14:28:45 · 296 阅读 · 0 评论 -
使用BlockingQueue进行线程间通信(java)
我们可以使用管道进行线程间通信,Java IO中提供了PipedWriter类和PipedReader类让线程间通信,《Java编程思想》在21.5.5节提供了例子。但是,Java提供了更健壮和容易的方式,即阻塞队列BlockingQueue来解决所有线程间协作的问题。所以,我们可以用BlockingQueue来实现线程间通信,原理很简单,一个线程向队列中添加元素,而另一个线程从队列中获取元素。贴代原创 2015-06-29 20:58:41 · 936 阅读 · 0 评论 -
Java Socket编程实现在终端上的双工Chat
理应是对等通信,不过Java Socket通信必须区分Server和Client原创 2015-06-08 20:44:11 · 737 阅读 · 0 评论 -
Java命令行
Ubuntu下。我在/home/sen/JavaProgram 下写了CommandLine.javapublic class CommandLine { public static void main(String args[]){ for(int i=0; i<args.length; i++){ System.out.println("args[" + i原创 2015-06-07 15:09:23 · 489 阅读 · 0 评论 -
《Java Concurrency in Practice》中文版笔记
第1章 简介1.1 并发简史茶壶和面包机的生产商都很清楚:用户通常会采用异步方式来使用他们的产品,因此当这些机器完成任务时都会发出声音提示。1.2 线程的优势线程能够将大部分的异步工作流转换成串行工作流,因此能更好地模拟人类的工作方式和交互方式。线程还可以简化JVM的实现,垃圾收集器通常在一个或多个专门的线程中运行。因此,操作系统提供了一些高效的方法来实现多路I/O,例如Unix的sele原创 2015-09-12 22:44:36 · 5415 阅读 · 0 评论