Java集合之Set接口(下)

一、承接上篇Java集合之Set接口(上),继续对Set接口进行讲解

二、Set接口下的实现类:

  2.1、HashSet集合:

    2.1.1、HashSet是以HashMap实现的集合,存放的数据是无序的,可以存放null元素,不支持同步,线程不安全;实现同步需要:Collections.synchronizedSet(new HashSet<>())

    2.1.2、HashSet中自定义对象去重:

      2.1.2.1、去重必备条件:覆盖对象的equals方法;覆盖对象的hashCode方法

      示例代码:

        

        

  2.2、LinkedHashSet集合:

    2.2.1、LinkedHashSet是以HashMap和双向链表实现的集合,存放的数据是有序的(存放顺序),可以存放null元素,不支持同步,线程不安全;实现同步需要:Collections.synchronizedSet(new LinkedHashSet<>())

    2.2.2、LinkedHashSet的方法与HashSet基本一致

  2.3、TreeSet集合:

    2.3.1、TreeSet是以TreeMap实现的集合,不可以容纳null元素,存放的数据是有序的(从小到大),不支持同步,线程不安全;实现同步需要:Collections.synchronizedSortedSet(new TreeSet<>())

    2.3.2、TreeSet中元素排序方式:

        1、数字按照大小排序

        2、字母按照字母顺序排序

        3、汉字按照Unicode码排序

        4、多字母排序是逐一比较共同有的位数,单独有的位数不比较

        示例代码:

          

    2.3.3、TreeSet存放自定义对象:自定义对象不能直接添加到treeSet集合中,想要添加到treeSet中必须要遵守一定的条件

        2.3.3.1、条件:

              1、自定义对象实现Comparable接口;

              2、覆盖接口中的compareTo方法

        2.3.3.2、compareTo方法返回值问题:

              1、如果返回值为0,只添加第一个元素

              2、如果返回值为正数,添加所有元素,按照添加顺序显示

              3、如果返回值为负数,添加所有元素,按照添加顺序倒序显示

        示例代码:

          

          

    2.3.4、TreeSet集合自定义对象属性排序:

        2.3.4.1、自定义对象排序阐述:

              1、TreeSet添加元素时会调用compareTo方法,如果该方法返回值为0时,认为添加元素和treeSet集合当中元素相等,则不添加;

               如果该方法返回值为正数时,就会放在treeSet集合中元素的右边;如果该方法返回值为负数时,就会放在treeSet集合中元素的左边

              2、通过此特性可以对TreeSet集合中添加对象中的某个属性比较大小,从而对TreeSet集合中对象进行排序

        示例代码:

          

          

    2.3.5、TreeSet比较器:自定义比较器对传入TreeSet集合的数据,无论是自定义对象还是包装类对象,都能按照自己的方式去比较,默认情况下比较时会调用传入集合对象的compareTo方法

        2.3.5.1、TreeSet比较器实现步骤:

              1、自定义比较器实现一个接口Comparator<T>

              2、接口中的泛型T为想要比较传入的集合元素类型

              3、接口的compare方法进行重写

        2.3.5.2、compare方法说明:

              1、方法参数:第一个代表当前正在添加的对象,第二个代表集合当中的对象

              2、方法返回值:

                2.1、如果该方法返回值为0时,认为添加元素和treeSet集合当中元素相等,则不添加

                2.2、如果该方法返回值为正数时,就会放在treeSet集合中元素的右边

                2.3、如果该方法返回值为负数时,就会放在treeSet集合中元素的左边

        2.3.5.3、示例代码:

              

              

posted @ 2022-07-14 17:16  忘chuan  阅读(63)  评论(0编辑  收藏  举报