Set集合

目录

一、Set集合

        1.Set集合概述和特点

        2.Set集合的使用

二、Set集合的实现类特点

三、TreeSet集合

        1.TreeSet集合的特点

        2.TreeSet集合的基本使用

        3.自然排序Comparable的使用

        4.比较器排序Comparator的使用

        4.两种比较方式的总结

四、红黑树   

        1.红黑树的特点

        2.红黑树的红黑规则

        3.红黑树添加节点的默认颜色

        4.红黑树添加节点后如何保持红黑规则

五、HashSet集合

        1.HashSet集合的特点

        2.HashSet集合的基本应用

        3.哈希值    

        4.哈希表结构


一、Set集合

        1.Set集合概述和特点

        不可存储重复元素、无序、没有索引、不能使用普通for循环遍历。

        2.Set集合的使用

        存储字符串的遍历

public class MySet1 {
    public static void main(String[] args) {
      	//创建集合对象
        Set<String> set = new TreeSet<>();
      	//添加元素
        set.add("ccc");
        set.add("aaa");
        set.add("aaa");
        set.add("bbb");

//        for (int i = 0; i < set.size(); i++) {
//            //Set集合是没有索引的,所以不能使用通过索引获取元素的方法
//        }
      
      	//遍历集合
        Iterator<String> it = set.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("-----------------------------------");
        for (String s : set) {
            System.out.println(s);
        }
    }
}

二、Set集合的实现类特点

        1.HashSet:无序、不重复、无索引。

        2.LinkedHashSet:有序、不重复、无索引。

        3.TreeSet:可排序、不重复、无索引。

三、TreeSet集合

        1.TreeSet集合的特点

        不可以重复存储元素;没有索引;可以将元素按照规则进行排序。

        TreeSet():根据其元素的自然排序进行排序。

        TreeSet(Comparator comparator) :根据指定的比较器进行排序。

        2.TreeSet集合的基本使用

        存储Internet类型的整数并遍历

public class TreeSetDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        TreeSet<Integer> ts = new TreeSet<Integer>();

        //添加元素
        ts.add(10);
        ts.add(40);
        ts.add(30);
        ts.add(50);
        ts.add(20);

        //遍历集合
        for(Integer i : ts) {
            System.out.println(i);
        }
    }
}

        3.自然排序Comparable的使用

        实现步骤:

    1. 使用空参构造创建TreeSet集合

          用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的。

     2. 自定义的Student类实现Comparable接口

          自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法。

      3. 重写接口中的compareTo方法

         重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。

        4.比较器排序Comparator的使用

        实现步骤:

        用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的

        比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法

        重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

        4.两种比较方式的总结

        两种比较方式小结“”

        自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序。

        比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序。

        在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序。

        两种方式中关于返回值的规则:

        如果返回值为负数,表示当前存入的元素是较小值,存左边。

        如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存。

        如果返回值为正数,表示当前存入的元素是较大值,存右边。

四、红黑树   

        1.红黑树的特点

                平衡二叉B树

                每一个节点可以是红或者黑

                红黑树不是高度平衡的,它的平衡是通过"自己的红黑规则"进行实现的

        2.红黑树的红黑规则

                1. 每一个节点或是红色的,或者是黑色的

                2. 根节点必须是黑色

               3. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的

                4. 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连 的情况)

                5. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点

        3.红黑树添加节点的默认颜色

                添加节点时,默认为红色,效率高

        4.红黑树添加节点后如何保持红黑规则

        根节点位置

                直接变为黑色

        非根节点位置

          父节点为黑色

                  不需要任何操作,默认红色即可

          父节点为红色

                  叔叔节点为红色

                          1. 将"父节点"设为黑色,将"叔叔节点"设为黑色

                          2. 将"祖父节点"设为红色

                          3. 如果"祖父节点"为根节点,则将根节点再次变成黑色

                  叔叔节点为黑色

                          1. 将"父节点"设为黑色

                          2. 将"祖父节点"设为红色

                          3. 以"祖父节点"为支点进行旋转

五、HashSet集合

        1.HashSet集合的特点

        底层数据结构是哈希表、存取无序、不可以存储重复元素、没有索引,不能使用普通for循环遍历。

        2.HashSet集合的基本应用

        存储字符串的遍历

public class HashSetDemo {
    public static void main(String[] args) {
        //创建集合对象
        HashSet<String> set = new HashSet<String>();

        //添加元素
        set.add("hello");
        set.add("world");
        set.add("java");
        //不包含重复元素的集合
        set.add("world");

        //遍历
        for(String s : set) {
            System.out.println(s);
        }
    }
}

        3.哈希值    

        哈希值简介:

        是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

        如何获取哈希值:

        Object类中的public int **hashCode():返回对象的哈希码值

        哈希值的特点:

        同一个对象多次调用hashCode()方法返回的哈希值是相同的

         默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

        4.哈希表结构

        JDK1.8以前:数组+链表

     JDK1.8以后:节点数小于等于8:数组+链表;节点个数大于8个:数组+红黑树。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值