美文网首页
Java常用集合-Set(HashSet、TreeSet和Lin

Java常用集合-Set(HashSet、TreeSet和Lin

作者: HACKL | 来源:发表于2021-01-16 10:08 被阅读0次

Set注重独一无二的性质,用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。

一、HashSet(Hash表)

哈希表存储的是哈希值。HashSet存储元素的顺序并不是按照存入的顺序,而是按照哈希值来存的,所以取数据也是按照哈希值来取的。元素的哈希值是通过元素的hashcode方法来获取的,HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法,如果equals结果为true,HashSet就视为同一个元素,如果为false就不是同一个元素;

哈希值相同equals为false的元素时怎么存储呢?就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中),也就是哈希一样的存一列:

hashCode值不同的情况下:

hashCode值相同但equals不相同的情况:

HashSet通过hashCode值来确定元素在内存中的位置,一个hashCode位置上可以存放多个元素。

二、TreeSet(二叉树)

1、TreeSet是使用二叉树的原理对新add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入二叉树指定的位置;

2、Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自己定义的类必须实现Comparable接口,并且覆盖相应的compare()函数,才可以正常使用;

3、在覆盖compare函数时,要返回相应的值才能使TreeSet按照一定的规则来排序;

4、比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

三、LinkHashSet(HashSet+LinkedHashMap)

LinkHashSet的特点:保证怎么存怎么取,底层是哈希表+链表,保证了元素有序

相关文章

网友评论

      本文标题:Java常用集合-Set(HashSet、TreeSet和Lin

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