1、set的基本理论 a、元素是无序(存入和取出的顺序不一定一致),元素不可以重复, b、set集合的功能与Collection集合的功能是一致的(就方法调用而言) c、我们在这里在区分一下list和set去除重复对象的方法 (List只依赖于equals方法,而Set依赖于hashCode、equals方法)
注:jdk 1.8/1.7 底层做了调整,使得其有序2、集合框架HashSet a、底层数据结构是哈希表 b、HashSet是如何保证元素唯一性的呢? 答:通过元素的两个方法:hashCode与equals方法来完成 如果hashCode值相同,才会判断equals是否为true; 如果hashCode值不同,那么不会调用equals。 注:因为 hashCode、equals 在底层数据结构都写好了,我们在这里只需要重写这两个方法就可以使其自动调用了 hashCode的重写: equals的重写: 重写这两个方法之后,我们只需要插入数据: 然后遍历集合,查看结果,就可以清晰的看出重复的被去掉了
3、集合框架TreeSet(自然排序、数据结构二叉树、比较器排序)
自然排序:TreeSet可以对set集合中元素进行排序,因为 String实现了Comparable接口,所以可以直接进行排序
注:引用数据类型想要排序,必须实现Comparable接口,若引用数据类型没有 实现Comparable接口,那么会出现 (java.lang.ClassCastException: com.javaxl.Peroon cannot be cast to java.lang.Comparable),你实现引用数据类型实现此接口就没问题了数据结构二叉树: 可以对set集合进行排序,底层数据结构是二叉树;
保证元素唯一性的依据是,compareTo方法return 0比较器排序: (TreeSet排序的第二种方式)
出现的情况:当元素自身不具备比较性时,或者具备的比较性不是所需要的; 而我们需要集合具有比较性,这是,就需要比较器排序了这里我们用一个案例来解释比较器排序
首先,我们肯定要先把HashCode方法和equals方法重写 然后写一个方法,把先按年龄,再按姓氏排序写好:
去定义一个比较器的容器,把主次条件写好: 到了这里,我们就去写一个treeSet的集合,再插入数据进行遍历即可:
然后,再把结果显示出来,在下面我特意写了两个一样的名字,不一样的年龄,可以清晰的看出来先按姓氏在按年龄排序
好了,set集合介绍到这里,谢谢~
