【补】自学Java第25天

对于哈希表的理解,总算是搞明白些了,

虽然算不上理解的很透彻,

但大体上明白了。


哈希表是用来干嘛的?

它是HashSet的底层,该集合元素不能重复,

哈希表就是用来高效解决这个问题的。


判断元素不可重复,最容易想到的方法是:

将元素和集合中的已有元素依次比较,

若是有相同的就不添加。


这样的话,每次添加元素就得遍历集合,

效率太低了,所以哈希表就应运而生,

哈希表它是如何做的?


哈希表其本质就是:数组,链表,红黑树。

对于它来说,有两个非常重要的东西,

一个是哈希值,一个是equals。


哈希值不同,那元素必定不相同,

直接将元素添加进一个数组中,

哈希值就类比于数组索引。


哈希值相同,元素也可能不同,

所以还需要用equals方法比较这两个值,

如果一样,元素重复了,不添加


如果不一样,将元素添加进链表。

哈希值相同的元素在同一链表。

就像葡萄藤一样,最上面的杆子就是数组,

一串串的葡萄就是链表。


如果一串里的葡萄过多,元素超过了8个,

链表就会重构,重构成红黑树,

因为红黑树查询效率比链表快。


总而言之,一切都是为了效率。

你可能感兴趣的:(【补】自学Java第25天)