Java第十七次笔记(强化部分Day06)---Set系列集合、Map集合体系

目录

本部分的学习目标:133

一、Set系列集合 134

1.1Set系列集系概述 134

总结:

1.2HashSet元素无序的底层原理:哈希表 134(无序的原因)

 HashSet1.8版本的原理解析:

总结:

​编辑 1.3HashSet元素去重复的底层原理 134 (不重复的原因)

HashSet去重复原理解析:

 总结:

1.4实现类:LinkedHashSet 134

 总结:

 1.5实现类:TreeSet集合概述和特点 134

 自定义排序规则:

 总结:

 二、Collection体系的特点、使用场景总结 134

三、补充知识:可变参数 135 

 对注意事项的解释:

注意:

 四、Collection体系的综合案例 135

 小技巧:

五、Collection体系的综合案例  136

 案例:斗地主 

斗地主案例的空位坑。。。。。。。

六、Map集合体系 137

6.1Map集合的概述 137 

 使用场景的介绍:

 总结:

​编辑6.2Map集合体系特点 137

 Map集合体系

 总结:

 6.3Map集合中的API 137

 6.4Map集合的遍历方式一:键找值 137

​编辑 6.5Map集合的遍历方式二:键值对 137

 6.6Map集合的遍历方式三:Lambda 137

 案例:Map集合案例-统计投票人数 138 (未做)

 6.7Map集合的实现类HashMap 138

Map集合体系 

HashMap的特点 

 总结:

6.8Map集合的实现类LinkedHashMap 138 

 LinkedHashMap集合概述和特点 

 快捷键小技巧:

总结:

 七、补充知识:集合的嵌套 139 (未理解和未操作)


本部分的学习目标:133

一、Set系列集合 134

1.1Set系列集系概述 134

 

总结:

1.2HashSet元素无序的底层原理:哈希表 134(无序的原因)

 

 

 

 

 结论:哈希表是一种对于增删改查数据性能都比较好的结构。

 HashSet1.8版本的原理解析:

 

 

问题:如何将链表转换为红黑树,实际上用的是根据哈希值进行比较得到最终的红黑树。

结论:JDK8开始后,哈希表对于红黑树的引入进一步提高了操作数据的性能。

总结:

1.3HashSet元素去重复的底层原理 134 (不重复的原因)

HashSet去重复原理解析:

 

set去重的原理:先进行对象的哈希值判断,然后再判断equals。

 案例:

在没有使用哈希值与equals进行双重判断时,集合中的元素是没有被去重复的。

代码如下:

import java.util.HashSet;
import java.util.Set;

public class SetDemo3 {
    public static void main(String[] args){
        //Set集合去重复原因:先判断哈希值,在判断equals
        Set<Student> sets = new HashSet<>();
        
        Student s1 = new Student("wuyang",20,'男');
        Student s2 = new Student("wuyang",20,'男');
        Student s3 = new Student("tangsan",21,'男');
        
        sets.add(s1);
        sets.add(s2);
        sets.add(s3);

        System.out.println(sets);
    }
}

结果:

 此时集合中数据依旧出现重复的情况,并没有去重复。

 在使用哈希值与equals进行双重判断时,集合中的元素是被去重复的。 

在自己所编写的类中,和生成构造器的方式一样,进行生成哈希值和equals。

 本部分的展示如下所示:

代码如下:

import java.util.HashSet;
import java.util.Set;

public class SetDemo3 {
    public static void main(String[] args){
        //Set集合去重复原因:先判断哈希值,在判断equals
        Set<Student> sets = new HashSet<>();

        Student s1 = new Student("wuyang",20,'男');
        Student s2 = new Student("wuyang",20,'男');
        Student s3 = new Student("tangsan",21,'男');

        sets.add(s1);
        sets.add(s2);
        sets.add(s3);

        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        System.out.println(s3.hashCode());


        System.out.println(sets);
    }
}

 结果:

 结果解释说明:

总结:

去掉集合中重复的对象,使用hashSet集合。

1.4实现类:LinkedHashSet 134

 说明:

顺着红线找就能找到开始的顺序。本部分是在最右侧的青色开始的,陆续的向左进行。

 总结:

1.5实现类:TreeSet集合概述和特点 134

 

 

对于常见的数据类型:整型(按照数字大小进行排序)、字符串(根据首字母ASCII码进行排序) 

 中文是按首字符的utf-8编码升序排的

 

 自定义排序规则:

 两种方式的集合都存在的话,优先根据集合中自带的比较器规则进行比较。

 方式一:

方式二:

 

 总结:

 二、Collection体系的特点、使用场景总结 134

 总结:

三、补充知识:可变参数 135 

 学习可变参数的目的是为了后面集合工具类Collections的使用。

 根据上面的需求,就可以使用可变参数进行使用,来解决该问题。

 对注意事项的解释:

需要符合注意事项要求进行规范的使用可变参数,违反注意事项中的之一,就会出现报错。

代码如下:

import java.util.Arrays;

public class MethodDemo {
    public static void main(String[] args){
        sum();//1、不传参数
        sum(10);//2、可传递一个参数
        sum(10,20,30);//3、可传递多个参数
        sum(new int[]{10,20,30,40,50,60});//4、可传递数组
    }
    public static void sum(int...nums){
        //  注意:可变参数在方法内部其实是一个数组的形式存在,所以如果想要提取数据,通过处理数组一样皆可对数据进行处理
        System.out.println("元素个数:" + nums.length);
        System.out.println("元素内容:" + Arrays.toString(nums));//读取数组内容
    }
}

结果:

注意:

1、最主要的是如何使用可变参数的方法使用

2、如何提取可变参数的数据 

 四、Collection体系的综合案例 135

 不是集合,只是个工具类。

 代码解释:

批量的在集合中添加元素内容。

 

对于排序方式1解释:

该排序方式能够进行对按照自定排序方式进行排序后,其重复的数据不会被删除掉,会进行保留。 相比本文中1.5中方式二更方便。

方式2:

 小技巧:

快捷键:

shift+F6,同时批量修改同一变量名

Alt+j,可进行同一变量名筛选修改

五、Collection体系的综合案例  136

 案例:斗地主 

 解释:为什么使用静态的集合作为54张牌的对象?

因为静态变量在类加载是就运行了,只需要加载一次。

斗地主案例的空位坑。。。。。。。

六、Map集合体系 137

Map集合不属于Collection集合的体系,两者是互不相属的。

6.1Map集合的概述 137 

 双列集合:实际上就是键值对,一个键值对称之为一个元素。

举例:

该Map集合内容只有三个元素。

 

 

 使用场景的介绍:

 总结:

6.2Map集合体系特点 137

 Map集合体系

 

对于Map集合中的键值对的解释:可以理解为一个老公只能有一个老婆,但是一个老婆可以有两个老公。所以才会有下面Map集合是由键决定的。

 总结:

 6.3Map集合中的API 137

 

 6.4Map集合的遍历方式一:键找值 137

 6.5Map集合的遍历方式二:键值对 137

 把元素当作一个整体来处理即键值对。

 快捷键小技巧:

ctrl+alt+v:自动补全将Map集合转换成Set集合

输入maps.entrySet()后再用快捷键就会自动补全。

 

 6.6Map集合的遍历方式三:Lambda 137

 案例:Map集合案例-统计投票人数 138 (未做)

 

 6.7Map集合的实现类HashMap 138

Map集合体系 

 

HashMap的特点 

 总结:

6.8Map集合的实现类LinkedHashMap 138 

 

 LinkedHashMap集合概述和特点 

 

 快捷键小技巧:

shift+alt+方向上下键:实现代码行整体的上下移动

总结:

 

 七、补充知识:集合的嵌套 139 (未理解和未操作)

 案例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值