美文网首页
data struct

data struct

作者: jojo1313 | 来源:发表于2019-12-05 10:55 被阅读0次

数组:
字符串和数组在一个连续的内存空间存储数据和字符,查找和插入删除 时间复杂度O(1)空间复杂度O(n)
————————————————
HashMap:
Hashtable是线程安全,而HashMap则非线程安全
HashMap用数组+链表来存储key-value对,value是一个单向的链表结构,它具有Next指针,可以连接下一个实体,以此来解决Hash冲突的问题。
数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;
链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。


image.png
image.png

从上图我们可以发现数据结构由数组+链表组成,HashMap里面用到链式数据结构的一个概念。上面我们提到过Entry类里面有一个next属性,作用是指向下一个Entry。打个比方, 第一个键值对A进来,通过计算其key的hash得到的index=0,记做:Entry[0] = A。一会后又进来一个键值对B,通过计算其index也等于0,现在怎么办?HashMap会这样做:B.next = A,Entry[0] = B,如果又进来C,index也等于0,那么C.next = B,Entry[0] = C;这样我们发现index=0的地方其实存取了A,B,C三个键值对,他们通过next这个属性链接在一起。所以疑问不用担心。也就是说数组中存储的是最后插入的元素。到这里为止,HashMap的大致实现已经清楚了
————————————————

相关文章

网友评论

      本文标题:data struct

      本文链接:https://www.haomeiwen.com/subject/goargctx.html