JAVA初学下(仅做笔记)

news2025/1/22 13:10:21

一. Map集合(双列集合)

1.特点

键不能重复,值可以重复

Map接口位于最高层

2.常见API

2.1基本功能

    

    

①注意V put(K key,V value)这个方法,

当加入 的键值对元素的键(key) 不存在时,就会将 键值对 加到双列集合中,此时返回值为null

当加入 的键值对元素 的键(key)已在双列集合中存在时 ,就会 覆盖原有 键(key) 对应的值(value) ,并将value返回。

2.2Map集合的获取功能

3.对于接口内的接口很懵,回顾一下过去的内部类

3.1成员内部类

①两种 获取 成员内部类对象的方式

②Iterator迭代器是 集合的内部类,通过调用方法来获取对象。

 

 

 3.2ArrayList的Iterator  是成员内部类

3.2内部类怎样 使用外部类 的成员变量,成员方法。

注意Outer是一个类名,它是可以改变的,用 类名.this 来调用外部类的成员变量或方法

 3.3静态内部类

记得加new 后加括号,因为 此时是 创建内部类的对象,可以想象,平常创建对象的时候都会加括号,跟构造方法有关。

4.遍历方式

4.1通过 键 去找 值

通过 Map的keySet()方法可以获得 包含所有key的一个单列集合

 public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("海绵宝宝", 1);
        map.put("派大星", 2);
        map.put("章鱼哥", 3);
        //键找值
        //1.获取所有的键(key),放在一个单列集合中
        Set<String> myKeySet = map.keySet();
        //通过迭代器遍历单列集合,并用Map的get(KEY k)方法来获取
        Iterator<String> it = myKeySet.iterator();
        while (it.hasNext()) {
            String key = it.next();
            Integer value = map.get(key);
            System.out.println("key:" + key + "value:" + value);
        }
        //通过增强for遍历
        for (String key : myKeySet) {
            Integer value = map.get(key);
            System.out.println("key:" + key + "value:" + value);
        }
        //使用lambda表达式
        myKeySet.forEach(
                key -> {
                    Integer value = map.get(key);
                    System.out.println("key:" + key + "value:" + value);
                }
        );
    }

4.2通过 键值对对象 来获取 键和值

 public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("海绵宝宝", 1);
        map.put("派大星", 2);
        map.put("章鱼哥", 3);
        //Entry接口是 Map接口的内部接口,所以要用Map.Entry
        //这和内部类很像的,外部类.内部类  对象名=new 外部类().内部类()
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        //通过迭代器去遍历单列集合,不过这时候里面的类型是 Entry接口,
        // 这里使用接口的多态,为了方便学习该接口的一些方法
        Iterator<Map.Entry<String, Integer>> it = entries.iterator();
        while (it.hasNext()) {

            Map.Entry<String, Integer> entry = it.next();
            Integer value = entry.getValue();
            String key = entry.getKey();
            System.out.println(key + " = " + value);
        }
//增强for遍历 遍历单列集合
        for (Map.Entry<String, Integer> entry : entries) {
            Integer value = entry.getValue();
            String key = entry.getKey();
            System.out.println(key + " = " + value);
        }
        //lambda表达式遍历单列集合
        entries.forEach(
                stringIntegerEntry -> {
                    System.out.println(stringIntegerEntry.getKey() + " = " + stringIntegerEntry.getValue());

                });
    }

4.3通过lambda表达式遍历 双列集合

前面我们通过 键找值     键值对对象    两种方式 来获取 获取一个单列集合 并对其进行遍历。

现在,我们可以直接 里面 Map的forEach()方式来直接获取key和value。

对于Map的forEach的底层原理,其实是利用 增强for来完成的。

 Map<String, Integer> map = new HashMap<>();
        map.put("海绵宝宝", 1);
        map.put("派大星", 2);
        map.put("章鱼哥", 3);

map.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String key, Integer value) {
                System.out.println(key + " = " + value);
            }
        });

二. Map接口 的实现类

 1.HashMap

1.1HashMap特点

 

 ①利用 key去计算哈希值,如果Key是 自定义引用类型 因此需要重写key的hashCode方法,如果不是自定义类型,不需要重写。

②在同一索引下有多个元素,当被添加的元素的哈希值通过计算得到的index为该索引时,就会 比较键(key)是否相同,若相同则 将要添加的元素的值(value)会 覆盖  原来集合中存在的键(key)的值。 

若key与索引下的所有元素的key不同,则会将key挂在链表下面。

在单列集合中 ,通过比较属性值是否相等来去重。

因此当自定义数据类型时,需要重写键(key)的equals方法。

 

1.2 练习1

1.3 回顾 怎样重写 equals()方法

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django项目名称重命名

学会这个小白也能轻松修改项目名称;日常板砖中难免遇到项目多次利用的情况,修改项目名称也成了一门手艺😀;实际操作起来也非常简单,没有那些花花绿绿的东西. 一.项目奔跑 1.拿到项目后,我们先在pycharm运行下,看项目是否能正常奔跑起来; 注意收集正常奔跑后项目的执行环境等…

某程序员哀叹:月薪四五万,却每天极度焦虑痛苦,已有生理性不适,又不敢裸辞,怎么办?...

高薪能买来快乐吗&#xff1f;来看看这位程序员的哀叹&#xff1a;实在是扛不住了&#xff0c;每天都在极度焦虑和痛苦中度过&#xff0c;早上起来要挣扎着做心理建设去上班&#xff0c;已经产生生理性的头晕恶心食欲不振。有工作本身的原因&#xff0c;更多是自己心态的问题&a…

12纳米做出了7纳米的性能,为国产芯片打破美国限制指明道路

美国联合日本、荷兰等限制对中国供应先进芯片设备&#xff0c;试图借此阻止中国发展14纳米以下的先进工艺&#xff0c;然而日前中国一家芯片企业发布了一款全新的芯片&#xff0c;却给中国芯片行业指明了新道路&#xff0c;发展先进性能芯片又了可能性。龙芯近期发布了一款全新…

Flink 优化 (四) --------- 数据倾斜

目录一、判断是否存在数据倾斜二、数据倾斜的解决1. keyBy 后的聚合操作存在数据倾斜2. keyBy 之前发生数据倾斜3. keyBy 后的窗口聚合操作存在数据倾斜一、判断是否存在数据倾斜 相同 Task 的多个 Subtask 中&#xff0c;个别 Subtask 接收到的数据量明显大于其他Subtask 接收…

【DevOps】GitOps之痛 -不完美的GitOps

前言 在前两篇文章中&#xff0c;我们对GitOps进行了大致的介绍&#xff1a; 【DevOps】GitOps初识(上) - 让DevOps变得更好 【DevOps】GitOps初识(下) - 让DevOps变得更好 GitOps 作为软件发布实践方式&#xff0c;有着许多的优点&#xff0c;然而&#xff0c;世上并没有完美…

【Linux】Centos安装mvn命令(maven)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录一、下载maven包方法一&#xff1a;官…

CTF流量分析

在CTF里&#xff0c;一些pcapng或pcap文件后缀的数据 不同的数据包有不同的协议&#xff0c;常见的有HTTP&#xff0c;TCP协议 Wireshark 简介 是一个网络封包分析软件。网络封包分析软件的功能是获取网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料 使用WinPC…

舔狗日记:学姐生日快到了,使用Python把她的照片做成视频当礼物

舔狗日记1前言一、需要调入的模块二、实现合并多张图片转成 mp4 视频三、优化改进一下总结前言 这不是学姐生日快到了&#xff0c;于是我学了一手使用Python来把学姐的照片生成为视频&#xff0c;到时候给她一个惊喜&#xff01; 好了先不舔了&#xff0c;下面分享一下用pytho…

基于朴素贝叶斯分类器的钞票真伪识别模型

基于朴素贝叶斯分类器的钞票真伪识别模型 内容 本实验通过实现钞票真伪判别案例来展开学习朴素贝叶斯分类器的原理及应用。 本实验的主要技能点&#xff1a; 1、 朴素贝叶斯分类器模型的构建 2、 模型的评估与预测 3、 分类概率的输出 源码下载 环境 操作系统&#xf…

Leetcode.130 被围绕的区域

题目链接 Leetcode.130 被围绕的区域 mid 题目描述 给你一个 m x n的矩阵 board&#xff0c;由若干字符 X和 O&#xff0c;找到所有被 X围绕的区域&#xff0c;并将这些区域里所有的 O用 X填充。 示例 1&#xff1a; 输入&#xff1a;board [[“X”,“X”,“X”,“X”],[“X…

stm32霸道-lvgl移植学习(一)

文章目录效果有用链接要求创建工程屏幕驱动以及触屏驱动LVGL PortWidgets demo其它效果 目前显示驱动显示较慢&#xff0c;后续会优化。 有用链接 LVGL官网 代码下载 要求 要求最低要求 建议要求架构16、32、64位微控制器或微处理器时钟 > 16 MHz > 48 MHzFlash/RO…

《低代码PaaS驱动集团企业数字化创新白皮书》-平台化加低代码提供破解之道(1)

平台化加低代码提供破解之道 大型企业亟需通过下一代平台开发技术实现软件创新&#xff0c;实现对海量数据的采集加工&#xff0c;以及企业内部数据的互联互通&#xff0c;帮助客户以低成本、短周期、高效率的方式实现数字化应用&#xff0c;进而赋能业务创新。基于此&#xf…

408--计算机网络--网络层总结1

目录 一、网络层概述&#xff1a; 1、网络层的主要任务&#xff1a; 2、网络层向上提供两种服务&#xff1a; 二、IPV4地址分类与子网划分&#xff1a; 1、分类编址&#xff1a; 一、网络层概述&#xff1a; 1、网络层的主要任务&#xff1a; 络层的主要任务就是将分组从…

【数据库基操】启动与连接MySQL数据库

一、启动与关闭 只介绍一种方法&#xff1a; 打开命令行工具&#xff0c;以管理员身份运行 1.启动数据库 net start mysql80 //80是在安装的时候设置的名字&#xff08;默认&#xff09;&#xff0c;不用在意 2.关闭数据库 net stop mysql80 如题已经成功&#…

java获取本机ip的方法

Java中有一个类叫 Application&#xff0c;可以用来获取本机 ip&#xff0c;也可以用来获取网络连接的信息&#xff0c;例如网络上有什么主机、需要访问本机的主机名等。但是这个类只能在本机上使用&#xff0c;如果要访问外部的主机&#xff0c;还需要使用其它的方法。 首先在…

教育大数据总体解决方案(5)

&#xff08;4&#xff09;错题整理 将学生的本次考试错题进行集中整理&#xff0c;提炼出所有题目的题干和正确的答案。 &#xff08;5&#xff09;提高方案 分析学生对知识点掌握情况&#xff0c;推算出学生的进步空间以及下次考试的预测拔高分数。根据学生本次考试错误知识点…

你的APP内存还在暴增吗?试着用Bitmap管理下内存~

作者&#xff1a;layz4android 相信伙伴们在日常的开发中&#xff0c;一定对图片加载有所涉猎&#xff0c;而且对于图片加载现有的第三方库也很多&#xff0c;例如Glide、coil等&#xff0c;使用这些三方库我们好像就没有啥担忧的&#xff0c;他们内部的内存管理和缓存策略做的…

Java垃圾回收机制GC完全指南,让你彻底理解JVM运行原理

1、GC过程 1&#xff09;先判断对象是否存活(是否是垃圾) 可以通过引用计数算法和可达性分析算法来判断&#xff0c;由于引用计数算法无法解决循环引用的问题&#xff0c;所以目前使用的都是可达性分析算法 2&#xff09;再遍历并回收对象(回收垃圾) 可以通过垃圾收集器&…

使用Schrödinger Python API系列教程 -- 介绍 (一)

使用Schrdinger Python API系列教程 – 介绍 (一) 本文档可从Schrdinger网站www.schrodinger.com/pythonapi访问。 从Python文档字符串生成的完整API文档可以在这里访问 介绍 在最高级别上&#xff0c;Schrdinger Python API提供了一个基本的分子结构类&#xff0c;并允许与…

redis总结之-jedis

redis总结之-jedis4. Jedis4.1 Jedis简介4.1.1 编程语言与redis4.1.2 准备工作4.1.3 代码实现4.2 Jedis简易工具类开发4.2.1 基于连接池获取连接4.2.2 封装连接参数4.2.3 加载配置信息4.2.4 获取连接4.3 可视化客户端总结计划 1. Redis 入 门&#xff08;了解&#xff09;&…