- 浏览: 539920 次
- 性别:
- 来自: 杭州
最新评论
-
GGGGeek:
看完了博主的博文,如果没猜错的话应该是浙大吧?很多优秀的人因为 ...
转《D君的故事》 以时刻警示自己 -
游牧民族:
楼主写的不错,学习了,最近对爬虫比较感兴趣,也写了些爬虫相关的 ...
通用爬虫框架及heritrix爬虫介绍 -
jimmee:
jerome_s 写道ice 你怎么看? 粗略的看了一下ice ...
MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明 -
jerome_s:
ice 你怎么看?
MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明 -
jimmee:
nk_tocean 写道照着做了,但是不行啊,还是乱码.先确认 ...
hive编写udf处理非utf-8数据
文章列表
1、反转一个链表。循环算法。
1 List reverse(List l) {
2 if(!l) return l;
3 list cur = l.next;
4 list pre = l;
5 list tmp;
6 pre.next = null;
7 while ( cur ) {
8 tmp = cu ...
const unsinged short uni_table[]= {
0x4E00, /* GB2312 Code: 0xD2BB ==>一 Row:50 Col:27 */
0x4E01, /* GB2312 Code: 0xB6A1 ==>丁 Row:22 Col:01 */
0x4E03, /* GB2312 Code: 0xC6DF ==>七 Row:38 Col:63 */
0x4E07, /* GB2312 Code: 0xCDF2 ==>万 Row:45 Col:82 */
0x4E08, /* GB2312 Cod ...
In this chapter we introduce a simple specialized machine called a linear feedback shift register (LFSR). We describe how it works, discover interesting applications, and study its limitations. Later, in the book, we will repeat the same process with a general-purpose computer.
One-time pad. As moti ...
Abstract: This application note gives a function for random number generation using the MAX7651/52 microcontroller with 12-bit analog-to-digital converter (ADC).
Applications such as spread-spectrum communications, security, encryption and modems require the generation of random numbers. The most co ...
public class Primes {
public static void main(String[] args) {
int N = 25;
boolean[] a = new boolean[N];
// 先标记所有的数都是素数
for (int i = 2; i < N; i++)
a[i] = true;
for (int i = 2; i < Math.sqrt(N); i++) {
if (a[i] != false) {
// i没有被前面的步骤消去,i的i,i+1 ...
我在文章http://jimmee.iteye.com/blog/510265里已经说过如何自己实现队列Queue和堆栈Stack。不管是是队列还是堆栈,都可以采用数组或者链表的方式来是实现。
1.Java集合框架里存在Queue这个接口,之后有不同类型的队列的实现。有Stack这个类实现堆栈,其实这个类是通过继承Vector的方式来实现的,Vector和ArrayList的实现方式差不多,只不过Vector里的方法是线程安全的。其实我觉得Java框架里的Stack的实现方式个人认为并不是太好,与Vector之间采用Has-a的实现更好,而不是采用Is-a的方式。
2.对Lin ...
Java自带的LinkedList的实现的方式,可以说是最高效的。
可以分析一下其他的实现方式:
1.如果我们用只有一个头指针的单链表的方式实现LinkedList,那么在链表的末尾进行的操作效率就不是很高,例如,我们在链表的末尾的增加一个元素的操作,或者删除一个元素的操作,时间负责度都为O(n)。那么如果增加一个尾指针呢,是不是就可以实现效率高的操作了?
public boolean addLast(Object element){
Entry temp=new Entry();
temp.element=element;
temp.next=null;
...
LinkedList的实现其实是一个带哑头节点的双向循环链表。
1.LinkedList的字段
private transient Entry<E> header = new Entry<E>(null, null, null);
//Entry是一个LinkedList的内部类,其实就是链表上的节点,包含两个指针,一个指向
//前面节点,一个指向后面节点
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
Ent ...
ArrayList可以看作是对一个数组的包装,实现可变数组。
1.ArrayList的基本字段
//保存真正元素的数组,这里可能大家会感到奇怪,为什么把这数组标记为transient,这
//样序列化时不能序列化这个数组了。所以之后就只能才能手动序列化保存ArrayList里
//的元素值了。虽说数组里保存的都是对象的引用,序列化的时候,也会把真正的对象序
//列化保存起来的。但是如果是直接不用transient修饰这个数组,那么序列化时,那些
//elementData中为null的空间也会序列化。一句话:我们序列化时,是序
//列化ArrayList里的真正的元素,而不是elementDa ...
1.
List接口扩充了Collection接口,添加了一些和索引相关的方法。例如,List接口有一个get方法,返回指定索引值的元素。在任何List对象中,也就是说,在任何实现List接口的类的实例中,元素都按照索引值依次存储。索引值从0开始。
2.
看集合类的实现,我们首先关心最基本的三个方法的实现。
(1)add方法,就是增加元素的方法。
(2)remove方法,就是删除元素的方法。
(3)contains方法,就是检索元素的方法。
因为在使用过程中,这三个方法是最常用的。不同的实现方式,效率差别比较大。
其次,可以看每个类的迭代器的实现方式。
...
单链表的一些处理方式
- 博客分类:
- J2SE
1. 永不为空的循环链表
第一次插入:head.next=head;
在x后插入t: t.next=x.next;x.next=t;
移走x之后的节点:x.next=x.next.next;
循环遍历:
t=head;
do{…t=t.next;}while (t!=head);
检查是否只有一个数据项:
If(head.next==head);
2. 头指针初始化为null,尾指针为null,其实就是非循环单链表
初始化:head=null;
在x后插入t:
if(x==null){head=t;head.next=null;}
else{t.next=x.next;x.next=t}
移走 ...
回溯的基本思想是:从一个给定的起始位置,我们希望到达一个目的位置。我们重复地进行选择(可能是猜测)下一个位置应当是什么。如果一个给定的选择是有效的,即新的位置可能位于通向目的位置的途径中,则前进到这个新的位置,然后继续。如果一个给定的选择通向了死胡同 ,则回到前面的位置,进行其他的选择。回溯就是通过一系列位置选择到达目的位置,并且在不能到达目的位置时反向退回的策略。
回溯类的通用接口如下:
import java.util.*;
public interface Application{
//如果位置pos为通向目标位置的路径上,返回true,否则返回false
boolean vali ...
当需要解决的问题具有如下两个特性时就可以考虑使用递归:
(1) 问题的复杂度可以降低,但是保持原始问题的形式。
(2) 最简单的情况可以直接解决。
其实递归的两个特性分别对应数学归纳法里的归纳事件和基本事件。
注意
1) 递归方法通常需要消耗更多的内存。因为一般递归调用时要保存返回地址和参数的副本。
2) 在使用递归方法时要防止出现无穷递归,否则将出现StackOverflowError错误。
3) 当使用一个递归程序时,需要考虑到编译环境必须维护一个与递归深度成正比例的堆栈。对于一个庞大的问题,栈所需要的空间可能会使我们无法使用递归解决方案。例如,我们在定义一个链表的一些方法,使用递归的方式 ...
当一个类A使用了另一个类B时,到底是合成还是聚合的关系呢?
例如
public class A{
B b;
...
}
当一个A类型的对象销毁了其存储单元时,引用变量b也将销毁存储单元。但是b引用的对象是否也应当销毁存储单元?有两种情况需要考虑。
(1)合成(Composition):当一个A类型的对象销毁了存储单元时,b引用的对象也销毁存储单元。换句话说,b引用的对象的存在依赖于A类型的对象。
(2)聚合(Aggregation):当一个A类型的对象销毁了存储单元时,b引用的对象并没有销毁存储单元。换句话说,b引用的对象独立于于A类型的对象。
聚合的情况下,代码如下所示:
public c ...
纪念D明天走~~(前序)
一直认为D是一个智商很高的人,都说IQ〉150的人玩SC,都知道D玩SC很强,
去年毕业时SC学校告别赛,D在我们的百般鼓励之下还是没有勇气去show一把,
失望之余有点不太理解,本科时一直对D有神秘,也许 ...