数据结构随笔

摘要:

  写些对数据结构的理解。

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时,得到的记录是排过序的。

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

计划、执行、每天高效的活着学着
原文地址:https://www.cnblogs.com/huxiaoyun90/p/3384860.html