集合框架Set解析

    xiaoxiao2021-04-19  246

    标题

    set接口实现的类Collection set接口被实现的类HashSetHashSet原理介绍HashSet与List的判重复原理区别 TreeSetTreeset-自然排序TreeSet-二叉树排序TreeSet-比较器排序

    set接口实现的类

    Collection

    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。(资料来自百度百科)

    set接口被实现的类

    HashSet

    上诉讲到,Collection是有两个子接口List和Set,HashSet是实现了其中的Set,所以拥有Set的基本功能和原理。

    HashSet原理介绍

    HashSet的原理,与List不同,他存放的方式是哈希表存储,且他的元素是无序不可重复的,通俗的讲就是存入和取出的顺序不一定一致且不能重复。但JDK8.0版本以上,根据元素的类型,会有一定的原理来排序,比如int类型,他会根据从小到大来排序,如果是字符串类型,他会依据首字母a-z来排序,且就方法调用而言,set集合的功能与Collection集合的功能是一致的。

    HashSet与List的判重复原理区别

    与List对比,List判重复是采用contain里的equal来判断的,而HashSet在增加的时候则是先调用HashCode方法,也就是判断两个值的哈希码是否相等来决定的,如图,返回值是哈希码。 如果hashCode值相同,才会判断equals是否为true,如果hashCode值不同,那么不会调用equals。

    TreeSet

    Treeset-自然排序

    TreeSet排序原理是自然排序,但和HashSet差不多,如果值是字符串或者int的话,和Hashset一样都是无序且不重复的,而且存入的值也是会自动排序的。但如果值是其他数据类型的话,如果没有实现Comparable接口,那么会出java.lang.ClassCastException:com.javaxl.Peroon cannot be cast to java.lang.Comparable,实现引用数据类型实现此接口就没问题了。 在Comparable接口中实现compareTo方法,即可按照自己的意愿来进行排序。就如图,我是根据年龄大小来排序的,即可看出若当前对象的年龄比后一个对象要大的话,则返回正数,反之负数,0代表相同。

    TreeSet-二叉树排序

    二叉树排序的基本原理:使用第一个元素作为根节点,如果之后的元素比第一个小,则放到左子树,否则放到右子树。

    TreeSet-比较器排序

    当两种排序都存在时,比较器排序优先级更高,因此比较器用的多一些,在实际开发中,很多时候,引用数据类型是否具有比较性,或者比较规则,可能不由开发人员自己决定,那么开发人员想要对应的引用数据类型按照自己的排序方式进行排列,那么就需要实现comparator接口,实现compare方法

    如图,我先写好一个类集成继承实现了comparator接口,实现compare方法 , 每个对象则会根据compare方法和compareTo方法来进行排序。


    最新回复(0)