1.各种java常见的数据结构的时间复杂度?HashMap的复杂度?
| 数据结构 | 查找 | 插入 | 删除 |
| :------------------------------------- | :----- | :----- | :----- |
| 数组ArrayList | o(n) | o(1) | o(n) |
| 有序数组 | o(lgn) | o(n) | o(n) |
| 链表LinkedList | o(n) | o(1) | o(n) |
| 红黑二叉树TreeMap | o(lgn) | o(lgn) | o(lgn) |
| 哈希表HashMap (hash碰撞情况都是o(lgn)) | o(1) | o(1) | o(1) |
因为HashMap很少出现hash冲突了,因为哈希算法足够优秀,那么全是o(1)
但是当有链表的时候,那么就是o(n)的复杂度
如果转成红黑树 也就是二叉树的一种,那么应该是o(logN)的平均复杂度
红黑树是特殊的AVL树,AVL树又是特殊的二叉查找树,它的除删除之外所有操作平均运行时间都为O(log(n))
因为一般来说查找的复杂度是,给一个元素找到他对应的元素位置。所以HashMap还是很优秀的性能。
2.HashMap的原理