• set集合


    Set:元素是无序的(存入和取出的顺序不一定一致)。元素不可以重复
    |--HashSet:底层数据结构是Hash表
    HashSet是如何保证元素唯一性的?
    是通过元素的两个方法,hashCode和equals来完成的
    如果元素的hashCode值相同,才会判断equals是否为true
    如果hashCode的值不同,不会调用equals方法
    注意:对于判断元素是 否存在,以及删除等操作。依赖的方法是元素的hashCode和equals方法。
    |--TreeSet 可以对set集合中的元素进行排序
    底层数据结构是二叉树
    保证元素唯一性的依据
    compareTo方法return 0 ;
    TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法
    这中方式也称为元素的自然顺序,或者叫做默认顺序

    set集合的功能和Collection是一致的。


    Set集合的排序
    我们知道,Set集合是无序的,
    可以使用TreeSet类,那么TreeSet进行排序的规则是怎样的呢?
    1 TreeSet支持两种排序方式,自然排序和定制排序,在默认情况下,TreeSet采用自然排序.
    自然排序:
    TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合的元素按升序排列,这种方式就是自然排序.
    为什么集合元素有compareTo方法,因为集合元素对象实现了Comparable接口,该方法返回一个整数值,当一个对象调用该方法与另一个对象进行比较,例如:
    obj1.compareTo(obj2)如果返回0,表示这两个对象相等,如果该方法返回一个正整数,表示obj1大于obj2如果该方法返回一个负整数,表示obj1小于obj2
    所以需要使用TreeSet集合进行自然排序,元素必须实现Comparable接口,但是Java一些常用的类已经实现了该接口,例如:String Character Boolean Date Time
    BigDecimal BigInteger等
    如:
    TreeSet<String> ts = new TreeSet<String>();
    ts.add("b");
    ts.add("c");
    ts.add("a");
    System.out.println(ts);
    结果:a b c


    Set集合:(唯一)
    1.特点:存入顺序和取出顺序不一致,不保证顺序不变,且元素唯一,底层由HashMap实现
    2.HashSet    
    底层为哈希表----HashMap---唯一
       HashSet为什么唯一呢?
      依赖hashCode和equals方法来判断两个元素是否一样,
      比如在判断时:hashCode值不一样---------->元素直接添加
     hashCode值一样------>在判断地址值和equals是否一样(两个有一个一样就ok)--->也一样---  ----->不添加
    简单来说:hashCode不一样:直接添加
    hashCode一样,equals不一样:直接添加
    hashCode一样,equals也一样:不添加(此时说明是重复元素)
       说明:LinkedHashSet : HashSet的一个子类,可预知的迭代顺序,存储和取出顺序一致,数据结构由哈希表和链表实现,保证唯一性和有序性。
     
    3.TreeSet
    底层为TreeMap(红黑树)----唯一且能够根据某种排序规则进行排序,而比较是依赖于compareTo方法,方法在comparable接口内,需要排序的类要实现该接口。
    排序:由构造方法来决定使用哪一种比较方法
    (1)自然排序(元素具备):对象所属类实现了自然排序接口comparable,重写compareTo比较方法。
    TreeSet()
    (2)比较器排序(集合具备):
    TreeSet(Comparator  comparator) , 构造里面传一个Comparator比较器接口的实现类
     
    而在comparator对象的类实现了Comparator接口,也实现了比较的方法compare,传入两个待比较对象,写出比较逻辑,不过此处也可以不写Comparator的实现类,直接用匿名内部类来实现,重写比较方法compare即可。
     
         TreeSet存储自定义对象并保证排序和唯一,因为排序依赖于comparable接口内的compareTo方法,并且在底层调用的时候,会把自定义类转换为comparable类,(向上转型,多态),如果自定义的类没有实现该接口,则会报错。comparableException。compareTo返回0表示相等,大于0表示大于被比较对象。
  • 相关阅读:
    java数据类型转换
    复习Java基础
    最完整的台达PLC培训教程(沈阳工大)学习笔记1
    6.3.4 方法引用
    6.3.3函数式接口
    6.3 lambda 表达式
    java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类
    java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
    java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类
    软件开发需求风险分析
  • 原文地址:https://www.cnblogs.com/areyouready/p/7843921.html
Copyright © 2020-2023  润新知