集合类源码理解

JDK7中提供的集合类一般会包括数组、链表、树等数据结构。

Map

HashMap

首先要说得HashMap就是数组和链表的结合体,先看源码

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * 默认初始化容量,必须是2的N次方
 */
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
static final Entry<?,?>[] EMPTY_TABLE = {};
transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;
static class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
    int hash;
    ......
}

底层就是Entry数组,每个Entry持有next引用,构成链表。

全文

Vim基本操作

废话不多说,直入主题吧。

常用操作

1
2
3
4
5
6
7
8
9
10
11
vim 启动vim
i 进入插入模式
<esc> 进入命令行模式
yy 复制
p 粘贴
u 恢复
v 进入可视化模式
:w filename (保存文件为"filename":q 退出vim
:q! 强制退出
:w !sudo tee % 权限不足时,强制保存

删除

1
2
3
4
5
6
7
:set nu 显示行号
:n 移动到第n:1,5d 回车后,删除1-5dG 删除当前行后所有行
dd 剪切光标所在整行
dw 删除该单词
d0 删除该行开始到当前光标

移动光标

1
2
3
4
5
6
7
8
/kw 向前搜索kw
?kw 向后搜索kw
n 向前匹配kw
N 向后匹配kw
0 跳到行首
$ 跳到行尾
gg 跳到首行
G 跳到文件末尾

批量加注释

1
2
3
4
5
进入可视化模式(v)
使用上下键(shift可翻页)选择需要注释的多行
进入插入模式(i)
然后输入注释符
进入编辑模式(<Esc>)

替换字符串

1
2
3
进入可视化模式(v)
选中开始符后按下`%`直接匹配到结束符,
按下`d`删除后,按`i`后粘贴即可

Hello World

迁移到GitHub Pages上,发现很多好玩的东西,比如现在用的Hexo,在写博客同时也能多了解些Node.js
之前零零散散也分享过,但都没坚持多久就荒废了,然后在微博上偶尔也会唠叨几句自己遇到的问题,最近想着自己能把博客坚持写下去,多少也是对码农生涯一个见证。