数据结构随笔
摘要:
写些对数据结构的理解。
1) 个人觉得数据结构最基本的就两种,链表和数组。
链表的好处在于动态分配内存,增加删除方便,坏处在于查找不方便,增加额外存储空间;
数组的好处在于查找方便;坏处在于增加删除不方便,超出指定长度后需要重新分配内存。
2) 其他的数据结构,例如堆,栈,树,队列都可以使用数组或者链表实现。具体实现,可以查看JDK源码或者MSDN。
常见数据结构,即数据容器
a)Tree
查询速度快,插入速度慢
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