哈希表:给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
元素的哈希值是通过元素的hashcode方法 来获取的, HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法 如果 equls结果为true ,HashSet就视为同一个元素。如果equals 为false就不是同一个元素。
哈希值相同equals为false的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中)。也就是哈希一样的存一列。
问题:现在有一批数据,要求不能重复存储元素,而且要排序。ArrayList 、 LinkedList不能去除重复数据。HashSet可以去除重复,但是是无序。
所以这时候就要使用TreeSet了 红黑树(左小右大)时间复杂度O(lgn)
看到array,就要想到角标。
看到link,就要想到first,last。
看到hash,就要想到hashCode,equals.
看到tree,就要想到两个接口。Comparable,Comparator。
LinkedHashSet 会保存插入的顺序。
Vector就是ArrayList的线程安全版,它的方法前都加了synchronized锁,其他实现逻辑都相同。
LinkedHashMap比TreeMap快。
关于map总结
-
增强for循环使用方便,但性能较差,不适合处理超大量级的数据。
-
迭代器的遍历速度要比增强for循环快很多,是增强for循环的2倍左右。
-
使用entrySet遍历的速度要比keySet快很多,是keySet的1.5倍左右。
B-tree(平衡多路查找数) 复杂度O(lgn)
B+Tree相对于B-Tree有几点不同:mysql
- 非叶子节点只存储键值信息。
- 所有叶子节点之间都有一个链指针。
- 数据记录都存放在叶子节点中。
红黑树:
- 红色节点向左倾斜
- 一个节点不可能有两个红色链接
- 整个数完全黑色平衡,即从根节点到所以叶子结点的路径上,黑色链接的个数都相同。
以10为底的对数,记为lgN,以无理数e为底的对数,记为lnN.无理数e一般指自然常数。 自然常数,为数学中一个常数,是一个无限不循环小数,且为超越数,其值约为2.718281828459045