Set集合

A.Set集合概述和特点 4分48秒 掌握
  • 问题回顾与知识点总结
    • Set集合的特点是什么?
      • 元素唯一(元素不重复)
    • Set集合中因为是无序所以没有索引,通过什么方式可以遍历Set集合?
      • 增强For/迭代器
  • 练习
    • 创建HashSet集合并添加String类型的数据进去并遍历.
B.哈希值 7分01秒 理解
  • 问题回顾与知识点总结
    • 什么是哈希值?
      • 是Jdk根据对象的地址/String/数字算出来一串数字(int)
    • 如何获取对象的哈希值?
      • hashCode()是Object类的方法,所以说Java的对象都可以调用这个hashCode方法返回哈希值.
    • 哈希值有什么特点?
      • 如果自定义类没有重写hashCode方法,那么自定义类的对象生成的哈希值是根据对象的内存地址值生成的,所以说即便两个对象的属性一样,哈希值也不一样.
      • 诉求:如果两个对象属性一样,那么两个对象哈希值也要一样,所以在自定义的类中重写了hashCode方法(不调用Object类hashCode),是根据对象的属性生成哈希值.
      • 两个对象哈希值一样,不代表两个对象的属性一样.两个对象的属性一样,则两个对象的哈希值肯定一样.
      • 数字的哈希值是它本身.
C.HashSet集合概述和特点 3分16秒 掌握
  • 问题回顾与知识点总结
    • HashSet底层的数据结构是什么?
      • 哈希表(HashTable)
    • HashSet的无序指的是什么无序?
      • 存入元素的顺序和取出元素的顺序不一致(不是说肯定不一致)
D.HashSet集合保证元素唯一性源码分析 12分52秒 理解 -> 明白HashSet为什么元素唯一. 面试题
  • 问题回顾与知识点总结

    • HashSet通过什么来保证存储元素的唯一性的?

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lE2YMGpc-1574781388455)(C:\Users\刘博文-传智\AppData\Roaming\Typora\typora-user-images\1572661769077.png)]

      如果HashSet想要保证元素的唯一,那么HashSet泛型就必须要重写equals和hashCode方法.

E.常见数据结构之哈希表 4分27秒 理解
  • 问题回顾与知识点总结
    • Java8之前哈希表是通过什么实现的?Java8之后是通过什么实现的?
      • Java8之前数组+链表.
      • Java8之后数组+(链表)红黑树
    • Hash表如何计算元素在数组中存储的位置?
      • 使用元素的hash值对16取余(因为数组的初始化长度就是16) rehashed(再哈希)
F.HashSet集合存储学生对象并遍历 4分46秒 练习
  • 注意:想要HashSet存储自定义对象并且对象在Set中唯一,需要事先做什么操作?
    • 重写equals和hashCode方法.
  • 练习
    • 使用HashSet存储学生对象并遍历将学生对象信息打印到控制台. -> 10分钟
      • 测试:需添加重复元素.
G.LinkedHashSet集合概述和特点 3分33秒 掌握
  • 问题回顾与知识点总结
    • LinkedHashSet是由什么实现的?特点是什么?
      • 链表+哈希表来实现的 -> 在保证元素唯一的同时也保证元素的存入顺序和取出顺序是一致的.
    • 哈希表保证了什么特性?
      • 元素唯一的特性.
    • 链表保证了什么特性?
      • 有序(存入顺序和取出顺序)
H.TreeSet集合概述和特点 5分59秒 掌握
  • 问题回顾与知识点总结

    • TreeSet集合的特点中的有序指的是什么有序?

      • 元素按照某种规则进行排序.
    • TreeSet集合的构造方法分为哪两种?

      • TreeSet<E implment Comparable> ts = new TreeSet(); //无参构造
        
        TreeSet<E> ts = new TreeSet(Comparator c);
        
I.自然排序Comparable的使用 12分16秒 掌握
  • 问题回顾与知识点总结

    • 如果想要让TreeSet帮我们排序自定义的对象,那么自定义的对象所在的类必须实现Comparable.

    • 如何自定义TreeSet中的排序规则?

      • compareTo方法中有一个参数,这个参数是做什么用的?

        • this代表比较者 参数代表被比较者.
      • compareTo方法最终返回一个int类型的值,返回0,正数,负数分别代表什么?

        • 返回0 -> 表示比较者和被比较者重复.
        • 返回正数 -> 升序排列
        • 返回负数 -> 降序排列 不需要记住
      • 如果compareTo方法中只是单个条件,应该如何书写?

        • 直接将单个条件的结果返回.
      • 如果compareTo方法中是多个条件,主要条件和次要条件如何区分,如何书写?

        • 当主要条件对比完成之后的结果是0的时候再进行次要条件的对比.
          • 要判断 -> 主要条件对比完成的结果是不是0.
      • 基本数据类型和引用数据类型如何进行比较?(以int/string为例)

      • 如何使用自然排序进行比较?

        • 集合中的泛型类要实现Comparable -> 还要加泛型Student implments Comparable

        • 实现接口中compareTo方法.

        • 分清主要条件与次要条件 -> 进行主要条件的对比(基本数据类型,就相减或者是引用数据类型,就再compareTo方法进行对比)

        • 当主要条件对比完成之后判断结果,如果结果是0的话,使用次要条件继续进行对比,然后将次要条件的结果进行赋值.

        • 返回结果.

        • /*
          如何按照中文汉字的首字母进行排序(死格式);
          */
          Collator c = Collator.getInstance(Locale.CHINA);
          result = c.compare(this.getName(), s.getName());
          
    • 练习

      • 练习自然排序Comparable,Student对象,主要排序条件语文成绩,次要排序条件数学成绩 -> 正序/倒序都可以.
J.比较器排序Comparator的使用 5分17秒 掌握
  • 问题回顾与知识点总结
    • 如何使用Comparator比较器?
K.成绩排序 11分37秒 练习
  • 练习
    • 用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩)并遍历该集合.
      • 要求:按照总分从高到低排序. -> 降序
L.不重复的随机数 4分17秒 练习
  • 练习
    • 编写一个程序,生成10个1-20之间的随机数,要求随机数不重复,并在控制台输出.
M.泛型概述和好处 7分38秒 掌握
  • 问题回顾与知识点总结
    • 泛型的本质是什么?
      • 参数化类型.
    • 泛型的定义格式什么?
      • 单个泛型 <类型>
      • 多个泛型 <类型A,类型B> <类型A,类型B,类型C> <类型…>
    • 泛型的好处是什么?
      • 把运行期的错误提前到编译期.
      • 如果提前到了编译期 -> 避免强制类型转换.
N.泛型类 6分8秒 理解
  • 问题回顾与知识点总结

    • 泛型类的定义格式是什么?

      • 修饰符 class 类名<T>{
            private T t;
            //Get/Set方法.
        }
        
        public class Demo<T>{
             private T t;
            //Get/Set方法.
        }
        
        //在创建Demo对象的时候,我指定类型.
        Demo<String> d = new Demo();
        d.setT("abc");
        
    • 如果想在一个类中使用泛型,那么需要事先做什么事情?

      • 将所在类改为泛型类.
O.泛型方法 7分9秒 了解
  • 问题回顾与知识点总结

    • 泛型方法的格式是什么?

      • 修饰符 <T> 返回值类型 方法名(T t){
            
        }
        
    • 如果想在一个方法中使用泛型,那么需要事先做什么事情?

      • 将所在方法改为泛型方法.
P.泛型接口 3分13秒 理解
  • 问题回顾与知识点总结

    • 泛型接口的格式是什么?

      • 修饰符 interface 接口名<T> {
            void show(T t);
        }
        
        public interface Inter<T>{
            void show(T t);
        }
        
        public class InterImpl<T> implments Inter<T>{
            void show(T t){
                System.out.println(t);
            }
        }
        
        //具体show方法打印出什么数据类型 -> 根据InterImpl创建对象的时候指定什么类型,就打印什么类型.
        InterImpl<String> impl = new InterImpl<>();
        impl.show("abc"); //show方法只可以传入String类型.
        
    • 如果想在一个接口中使用泛型,那么需要事先做什么事情?

      • 将所在接口更改为泛型接口.
Q.类型通配符 5分49秒 理解
  • 问题回顾与知识点总结

    • 类型通配符的格式什么?

      • <?>
    • 类型通配符上限格式(向上泛型)是什么?表示什么意思?

      • <? extends 类型> -> 表示这个泛型中表示的最大范围就是类型.
        • <? extends Number> -> 最大的就是Number,同时也可以放Number的子类.
          
    • 类型通配符下限格式(向下泛型)是什么?表示什么意思?

      • <? super 类名>
        • <? super Number> -> 最小的就是Nunber,这个泛型里只可以Number和Number的父类.
          
  • 泛型 -> 规定集合中到底可以存储什么数据类型/规定类中的方法参数是什么类型.

R.可变参数 6分34秒 掌握
  • 问题回顾与知识点总结
    • 可变参数的格式是什么?
      • 在方法的参数的位置(数据类型… 变量名)
    • 可变参数实际上将传入进来的数据封装成了什么数据类型?
      • 封装为了一个数组.
    • 可变参数在形式参数中的什么位置?
      • 一个方法的参数中如果有可变参数,那么可变参数要在方法形参列表的最后一个位置.
      • 一个方法中不可以有多个可变参数.
    • 可变参数的方法可以重载吗?
      • int…a的效果等同于int[] a
S.可变参数的使用 10分3秒 掌握
  • 问题回顾与知识点总结
    • 使用Arrays的asList/List的List.of/Set.of方法的过程中,需要注意什么问题?
      • Arrays.asList返回的List集合不可以增加/删除元素(不可以修改集合的长度),但是可以修改集合中的元素的内容.
      • List.of返回的List集合不可以增加/删除/修改元素.
      • Set.of在调用这个方法的时候不可以传入重复的元素,返回的Set集合不可以添加/删除元素.
        • 可远观不可亵玩焉.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值