摘要:html
写些对数据结构的理解。java
1) 我的以为数据结构最基本的就两种,链表和数组。数组
链表的好处在于动态分配内存,增长删除方便,坏处在于查找不方便,增长额外存储空间;数据结构
数组的好处在于查找方便;坏处在于增长删除不方便,超出指定长度后须要从新分配内存。spa
2) 其余的数据结构,例如堆,栈,树,队列均可以使用数组或者链表实现。具体实现,能够查看JDK源码或者MSDN。代理
常见数据结构,即数据容器htm
a)Tree对象
查询速度快,插入速度慢blog
BinaryTree:排序
AVL树:
红黑树:
B/B+/B-树:
b) list
链表,顺序查询,插入删除代价小
c) queue
FIFO,由list/数组/stack实现(list最合适),顺序查询速度快,插入删除代价小
l ArrayDeque/ArrayList :队列,其实也是数组,加上头尾索引
l PriorityQueue:优先队列
l LinkedQueue/LinkedList:双向链表实现
l LinkedHashMap :单向链表实现了
l LinkedHashSet: 内部使用LinkedHashMap
d) Vector
数组,根据下标访问
e) Stack
FILO,可用数组实现,可本身实现下列类
l ArrayStack 默认初始大小,用数组实现
l LinkedStack 动态增长容量,用链表实现
f) heap
最大堆,最小堆,
Util包中无实现,本身可用数组实现
http://lotusyu.iteye.com/blog/1061822
g) map
存储方式是数组;存储结构红黑树(查找速度快,平均)
Java Util包实现:
通用 Map,用于在应用程序中管理映射
l HashMap 冲突解决使用list
l Hashtable
l LinkedHashMap
保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先获得的记录确定是先插入的。
l IdentityHashMap
简单说IdentityHashMap与经常使用的HashMap的区别是:前者比较key时是“引用相等”然后者是“对象相等”,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等,而HashMap只有在k1.equals(k2) == true 时才会认为两个key相等。有其特殊用途,好比序列化或者深度复制。或者记录对象代理。
l TreeMap
TreeMap实现SortMap接口,可以把它保存的记录根据键排序(使用红黑树排序),默认是按键值的升序排序,也能够指定排序的比较器,当用Iterator 遍历TreeMap时,获得的记录是排过序的。
l WeakHashMap
l ConcurrentHashMap
l PriorityQueue 最小堆
l ConcurrentSkipListMap 跳跃表
备注:http://java-mzd.iteye.com/blog/827523 Hash表分析以及Java实现
一个用于帮助实现您本身的 Map 类的抽象类
l AbstractMap