数据结构随笔

摘要: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时,获得的记录是排过序的。

http://www.cnblogs.com/liqizhou/archive/2012/09/27/java%E4%B8%ADtreemap%E5%92%8Ctreeset%E5%AE%9E%E7%8E%B0%E7%BA%A2%E9%BB%91%E6%A0%91.html

l WeakHashMap

l ConcurrentHashMap

l PriorityQueue 最小堆

l ConcurrentSkipListMap 跳跃表

 

备注:http://java-mzd.iteye.com/blog/827523  Hash表分析以及Java实现

 

一个用于帮助实现您本身的 Map 类的抽象类

l AbstractMap

相关文章
相关标签/搜索