A.Set集合概述和特点 4分48秒 掌握
- 问题回顾与知识点总结
- Set集合的特点是什么?
- 元素唯一(元素不重复)
- Set集合中因为是无序所以没有索引,通过什么方式可以遍历Set集合?
- 增强For/迭代器
- Set集合的特点是什么?
- 练习
- 创建HashSet集合并添加String类型的数据进去并遍历.
B.哈希值 7分01秒 理解
- 问题回顾与知识点总结
- 什么是哈希值?
- 是Jdk根据对象的地址/String/数字算出来一串数字(int)
- 如何获取对象的哈希值?
- hashCode()是Object类的方法,所以说Java的对象都可以调用这个hashCode方法返回哈希值.
- 哈希值有什么特点?
- 如果自定义类没有重写hashCode方法,那么自定义类的对象生成的哈希值是根据对象的内存地址值生成的,所以说即便两个对象的属性一样,哈希值也不一样.
- 诉求:如果两个对象属性一样,那么两个对象哈希值也要一样,所以在自定义的类中重写了hashCode方法(不调用Object类hashCode),是根据对象的属性生成哈希值.
- 两个对象哈希值一样,不代表两个对象的属性一样.两个对象的属性一样,则两个对象的哈希值肯定一样.
- 数字的哈希值是它本身.
- 什么是哈希值?
C.HashSet集合概述和特点 3分16秒 掌握
- 问题回顾与知识点总结
- HashSet底层的数据结构是什么?
- 哈希表(HashTable)
- HashSet的无序指的是什么无序?
- 存入元素的顺序和取出元素的顺序不一致(不是说肯定不一致)
- 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(再哈希)
- Java8之前哈希表是通过什么实现的?Java8之后是通过什么实现的?
F.HashSet集合存储学生对象并遍历 4分46秒 练习
- 注意:想要HashSet存储自定义对象并且对象在Set中唯一,需要事先做什么操作?
- 重写equals和hashCode方法.
- 练习
- 使用HashSet存储学生对象并遍历将学生对象信息打印到控制台. -> 10分钟
- 测试:需添加重复元素.
- 使用HashSet存储学生对象并遍历将学生对象信息打印到控制台. -> 10分钟
G.LinkedHashSet集合概述和特点 3分33秒 掌握
- 问题回顾与知识点总结
- LinkedHashSet是由什么实现的?特点是什么?
- 链表+哈希表来实现的 -> 在保证元素唯一的同时也保证元素的存入顺序和取出顺序是一致的.
- 哈希表保证了什么特性?
- 元素唯一的特性.
- 链表保证了什么特性?
- 有序(存入顺序和取出顺序)
- 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.
- 当主要条件对比完成之后的结果是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集合存储多个学生信息(姓名,语文成绩,数学成绩)并遍历该集合.
- 要求:按照总分从高到低排序. -> 降序
- 用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的子类.
-
- <? extends 类型> -> 表示这个泛型中表示的最大范围就是类型.
-
类型通配符下限格式(向下泛型)是什么?表示什么意思?
- <? super 类名>
-
<? super Number> -> 最小的就是Nunber,这个泛型里只可以Number和Number的父类.
-
- <? super 类名>
-
-
泛型 -> 规定集合中到底可以存储什么数据类型/规定类中的方法参数是什么类型.
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集合不可以添加/删除元素.
- 可远观不可亵玩焉.
- 使用Arrays的asList/List的List.of/Set.of方法的过程中,需要注意什么问题?