Java复习第四天

一、代码题

1.相同的树

(1)题目

给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

  • 示例 1: 输入:p=[1,2,3],q=[1,2,3] 输出:true
  • 示例 2: 输入:p =[1,2],q=[1,null,2] 输出:false
  • 示例 3: 输入:p=[1,2,1],q =[1,1,2] 输出:false

(2)思路实现

a.题目实现

  • 如果两个节点都为空,则它们是相同的。
  • 如果其中一个节点为空而另一个不为空,则它们不同。
  • 如果两个节点的值不同,则它们不同。
  • 如果两个节点的值相同,则递归地检查它们的左子树和右子树是否相同。

b.代码实现

  • 定义一个递归函数 isSameTree,接受两个 TreeNode 类型的参数 p 和 q。
  • 首先检查两个节点是否都为空,如果是,则返回 true。
  • 然后检查其中一个节点是否为空而另一个不为空,如果是,则返回 false。
  • 接着检查两个节点的值是否相同,如果不同,则返回 false。
  • 最后递归地检查两个节点的左子树和右子树是否相同,只有当两者都返回 true 时,才返回 true。

(3)代码实现

package com.thor.test;public class Demo {public static void main(String[] args) {//示例 1: 输入:p=[1,2,3],q=[1,2,3] 输出:trueTreeNode p1 = new TreeNode(1, new TreeNode(2), new TreeNode(3));TreeNode q1 = new TreeNode(1, new TreeNode(2), new TreeNode(3));System.out.println(new TreeNode.Solution().isSameTree(p1,q1));//示例 2: 输入:p =[1,2],q=[1,null,2] 输出:falseTreeNode p2 = new TreeNode(1, new TreeNode(2), null);TreeNode q2 = new TreeNode(1, null, new TreeNode(2));System.out.println(new TreeNode.Solution().isSameTree(p2,q2));//示例 3: 输入:p=[1,2,1],q =[1,1,2] 输出:falseTreeNode p3 = new TreeNode(1, new TreeNode(2), new TreeNode(1));TreeNode q3 = new TreeNode(1, new TreeNode(1), new TreeNode(2));System.out.println(new TreeNode.Solution().isSameTree(p3,q3));}}
class TreeNode {int val;//节点值TreeNode left;//左子节点TreeNode right;//右子节点TreeNode() {}//无参构造TreeNode(int val) {this.val = val;}//有参构造TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}//有参构造static class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {//如果两个节点都为空,则他们相同if(p==null&&q==null){return true;}//如果其中一个节点为空,另一个不为空,则他们不同if(p==null||q==null){return false;}//如果两个节点的值不同,则他们不同if(p.val!=q.val){return false;}//递归低检查两个节点的左子树和右子树是否相等return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}}
}

2.对称二叉树

(1)题目

你一个二叉树的根节点root,检查它是否轴对称。

  • 示例1: 输入:root=[1,2,2,3,4,4,3] 输出:true
  • 示例 2: 输入:root=[1,2,2,null,3,null,3] 输出:false

(2)思路实现

a.题目实现

  • 如果树为空,则它是对称的。
  • 定义一个辅助函数 isMirror,用于检查两个子树是否互为镜像。
  • 在 isMirror 函数中,首先检查两个节点是否都为空,如果是,则它们是对称的。
  • 然后检查其中一个节点为空而另一个不为空,如果是,则它们不对称。
  • 接着检查两个节点的值是否相同,如果不同,则它们不对称。
  • 最后递归地检查一个节点的左子树和另一个节点的右子树是否互为镜像,以及一个节点的右子树和另一个节点的左子树是否互为镜像

b.代码实现

  • 定义一个递归函数 isSymmetric,接受一个 TreeNode 类型的参数 root。
  • 如果 root 为空,则返回 true。
  • 调用辅助函数 isMirror,传入 root 的左子树和右子树。
  • 定义辅助函数 isMirror,接受两个 TreeNode 类型的参数 p 和 q。
  • 在 isMirror 函数中,首先检查两个节点是否都为空,如果是,则返回 true。
  • 然后检查其中一个节点为空而另一个不为空,如果是,则返回 false。
  • 接着检查两个节点的值是否相同,如果不同,则返回 false。
  • 最后递归地检查一个节点的左子树和另一个节点的右子树是否互为镜像,以及一个节点的右子树和另一个节点的左子树是否互为镜像。

(3)代码实现

package com.thor.test;public class Demo {public static void main(String[] args) {// 示例 1TreeNode root1 = new TreeNode(1,new TreeNode(2, new TreeNode(3), new TreeNode(4)),new TreeNode(2, new TreeNode(4), new TreeNode(3)));System.out.println(new Solution().isSymmetric(root1)); // 输出: true// 示例 2TreeNode root2 = new TreeNode(1,new TreeNode(2, null, new TreeNode(3)),new TreeNode(2, null, new TreeNode(3)));System.out.println(new Solution().isSymmetric(root2)); // 输出: false}
}class TreeNode {int val; // 节点值TreeNode left; // 左子节点TreeNode right; // 右子节点TreeNode() {} // 无参构造TreeNode(int val) {this.val = val;} // 有参构造TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;} // 有参构造
}
class Solution {public boolean isSymmetric(TreeNode root) {// 如果树为空,则它是对称的if (root == null) {return true;}// 调用辅助函数检查左子树和右子树是否互为镜像return isMirror(root.left, root.right);}private boolean isMirror(TreeNode p, TreeNode q) {// 如果两个节点都为空,则它们是对称的if (p == null && q == null) {return true;}// 如果其中一个节点为空而另一个不为空,则它们不对称if (p == null || q == null) {return false;}// 如果两个节点的值不同,则它们不对称if (p.val != q.val) {return false;}// 递归地检查一个节点的左子树和另一个节点的右子树是否互为镜像// 以及一个节点的右子树和另一个节点的左子树是否互为镜像return isMirror(p.left, q.right) && isMirror(p.right, q.left);}
}
二、集合

1.简介

2.ArrayList

(1)注意:声明的时候,最好采用多态的形式,就是父类引用指向子类对象

原因:关于可重复,有序操作的方法,都是在接口中已经定义好了;利于多态

(2)代码

List list =new ArrayList();
//增
list.add(1);
list.add(2);
list.add(3);
list.add(1);
//查
for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));
}

(3)单元测试——@Test

@Test
public void f01() {List list = new ArrayList();//增list.add(1);list.add(2);list.add(3);list.add(1);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
}
@Test
public void f02() {List list = new ArrayList();//增list.add(1);list.add(2);list.add(3);list.add(1);//删list.remove(1);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
}
@Test
public void f03() {List list = new ArrayList();//增list.add(1);list.add(2);list.add(3);list.add(1);//改list.set(0, 4);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
}

3.LinkedList

(1)代码

@Test
public void f01() {List list = new LinkedList();//增list.add(1);list.add(2);list.add(3);list.add(1);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
}
@Test
public void f02() {List list = new LinkedList();//增list.add(1);list.add(2);list.add(3);list.add(1);//删list.remove(1);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
}
@Test
public void f03() {List list = new LinkedList();//增list.add(1);list.add(2);list.add(3);list.add(1);//改list.set(0, 4);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
}

(2)特殊方法

4.List、ArrayList、LinkedList 区别

List

ArrayList

LinkedList

同点:二者都是有序的,父类为List

不同点:二者的底层结构不一样。

ArrayList的底层数据结构的数组结构,数组结构有个特点是查询快,因为它里面有索引,但是增加和删除慢,因为增加的时候需要考虑扩容机制。

LinkedList的底层数据结构是链表结构,链表结构增加和删除快,因为它们内部都有一个节点保存其地址值。但是查询慢,因为它们没有对应的索引操作

5.练习题

题目:如何存储多条狗狗信息,获取狗狗总数,逐条打印出各条狗狗信息 ?

package com.thor.test;import org.junit.Test;import java.util.ArrayList;
import java.util.List;
import java.util.Objects;public class Demo {@Testpublic void f01() {List list = new ArrayList();//增list.add(new Dog("欧欧","雪纳瑞"));list.add(new Dog("豆豆","泰迪"));list.add(new Dog("花花","金毛"));list.add(new Dog("美美","哈士奇"));System.out.println("共计有"+list.size()+"条狗");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}
}
class Dog{private String name;private String strain;@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", strain='" + strain + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Dog dog = (Dog) o;return Objects.equals(name, dog.name) && Objects.equals(strain, dog.strain);}@Overridepublic int hashCode() {return Objects.hash(name, strain);}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getStrain() {return strain;}public void setStrain(String strain) {this.strain = strain;}public Dog(String name, String strain) {this.name = name;this.strain = strain;}
}

6.Set

Set 入门案例

  • Set 不能重复,无序;遍历用增强 for,因为无序,没有索引。
  • 代码
@Test
public void f01() {Set set = new HashSet();//增set.add("中国");set.add("美国");set.add("中国");set.add("日本");set.add("韩国");System.out.println(set.size());for (Object o : set) {System.out.println(o);}
}

7.Map

  • Map 入门案例
  • Map 是双列集合
  • 新增是(key value 结构),key 不能重复,value 可以重复
  • 新增和修改用的是同一个方法——put
  • 代码
@Test
public void f01() {Map map = new HashMap();map.put("China","中国");map.put("American","美国");map.put("England","英国");map.put("Japan","日本");map.put("China1","中国");System.out.println(map.size());//查Set set = map.keySet();//增强forfor (Object key : set) {Object value = map.get((String) key);System.out.println(key+ " : "+ value);}
}

8.迭代器——Iterator

  • 所有的增强 for 循环,底层实际上是依赖于迭代器Iterator

(1)有序

@Test
public void f01() {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);System.out.println("\n遍历方式1");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i)+" ");}System.out.println("\n遍历方式2");for (Integer i : list) {System.out.println(i + " ");}System.out.println("\n遍历方式3");Iterator<Integer> iterator = list.iterator();while(iterator.hasNext()){System.out.println(iterator.next()+" ");}
}

(2)无序

@Test
public void f01() {Set<Integer> set = new HashSet<>();set.add(1);set.add(2);set.add(6);set.add(4);System.out.println("\n遍历方式1");for (Integer i : set) {System.out.println(i + " ");}System.out.println("\n遍历方式2");Iterator<Integer> iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next() + " ");}
}

9.Collections 集合框架工具类

@Testpublic void f01() {List<Integer> list = new ArrayList<>();for (int i = 1; i < 11; i++) {list.add(i);}//洗牌Collections.shuffle(list);System.out.println("洗牌的结果为:" + list + " ");}@Testpublic void f02() {List<Integer> list = new ArrayList<>();for (int i = 1; i < 11; i++) {list.add(i);}//洗牌Collections.reverse(list);System.out.println("洗牌反转后的结果为:" + list + " ");}@Testpublic void f03() {List<Integer> list = new ArrayList<>();for (int i = 1; i < 11; i++) {list.add(i);}//洗牌Collections.addAll(list,11,12);System.out.println("洗牌追加后的结果为:" + list + " ");}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024年华为OD机试】(C/D卷,200分)- 5G网络建设 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N。接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通。不同基站之间假设光纤的成本各不相同&#xff0c;且有些节点之间已经存在光纤相连。 …

Kubernetes 集群中安装和配置 Kubernetes Dashboard

前言 上篇成功部署Kubernetes集群后&#xff0c;为了方便管理和监控集群资源&#xff0c;安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI&#xff0c;旨在让用户轻松地部署容器化应用到 Kubernetes 集群&#xff0c;并对这些应用进…

前端【7】javascript-dom操作

目录 DOM 加载与脚本执行的时序问题 1. 将 <script> 标签放到 HTML 末尾 2.使用 defer 属性 3. 使用 window.onload 一、获取元素 1、getElementById 2、getElementsByClassName 3、getElementsByTagName 4、querySelector和querySelectorALL 5、对象的属性关…

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖

【1】引言 前序学习了使用numpy创建单通道的灰色图像&#xff0c;并对灰色图像的局部进行了颜色更改&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…

【2024年终总结】我与CSDN的一年

&#x1f449;作者主页&#xff1a;心疼你的一切 &#x1f449;作者简介&#xff1a;大家好,我是心疼你的一切。Unity3D领域新星创作者&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6; &#x1f449;记得点赞 &#x1f44d; 收藏 ⭐爱你们&#xff0c;么么哒 文章目录 …

MySQL主从配置

一、 主从原理 MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并在从服务器上执行这些日志中的操作。 二、主…

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

解决leetcode第3418题机器人可以获得的最大金币数

3418.机器人可以获得的最大金币数 难度&#xff1a;中等 问题描述&#xff1a; 给你一个mxn的网格。一个机器人从网格的左上角(0,0)出发&#xff0c;目标是到达网格的右下角(m-1,n-1)。在任意时刻&#xff0c;机器人只能向右或向下移动。 网格中的每个单元格包含一个值coin…

opengrok_windows_环境搭建

目录 软件列表 软件安装 工程索引 ​编辑 工程部署 问题列表 软件列表 软件名下载地址用途JDKhttps://download.java.net/openjdk/jdk16/ri/openjdk-1636_windows-x64_bin.zipindex 使用java工具tomcathttps://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tom…

c++ 与 Matlab 程序的数据比对

文章目录 背景环境数据保存数据加载 背景 ***避免数据精度误差&#xff0c;快速对比变量 *** 环境 c下载 https://github.com/BlueBrain/HighFive 以及hdf5库 在vs 中配置库 数据保存 #include <highfive/highfive.hpp> using namespace HighFive;std::string fil…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路&#xff0c;希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年&#xff0c;年初拿高绩效&#xff0c;但感觉逐渐被公司一点点剥离出中心&#xff1b;年中一直在学习防患于未然&#xff1b…

unity插件Excel转换Proto插件-ExcelToProtobufferTool

unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类&#xff1a;DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…

总结 uniapp 上不适配iphone的:new Date 时间、border线条、渐变

1、border样式缺了一边 这是错误样式&#xff1a; 需要添加: border: 1rpx solid #57c7bb; transform: rotateZ(0deg);//加入此代码解决iphone 不适配问题2、时间出现NaN 原因是因为ios中使用new Date 的时候出了问题 解决方案: 1.调整时间格式:将时间格式从"yyyy-MM-d…

【深度学习】Java DL4J 2024年度技术总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

快速学习GO语言总结

干货分享&#xff0c;感谢您的阅读&#xff01;备注&#xff1a;本博客将自己初步学习GO的总结进行分享&#xff0c;希望大家通过本博客可以在短时间内快速掌握GO的基本程序编码能力&#xff0c;如有错误请留言指正&#xff0c;谢谢&#xff01; 一、初步了解Go语言 &#xf…

【深度学习】2.视觉问题与得分函数

计算机视觉任务 可以通过神经网络搜索是什么类别的动物。 图像实际就是含有数值的三维矩阵。 像素值从0-255可以表示亮度递增的参数。数字越大&#xff0c;像素点越亮。 最后的3表示三个颜色通道&#xff0c;常见的如JPG、RGB等。 现实场景容易发生各种遮蔽现象。 计算机判断…

本地 AI 模型“不实用”?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Maui】下拉框的实现,绑定键值对

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&…

AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析

前言 本文我将介绍我和我的团队自主研发设计的一款AI产品的成果展示——“基于视频AI识别技术的煤矿安全生产管理系统”。 这款产品是目前我在创业阶段和几位矿业大学的博士共同从架构设计、开发到交付的全过程中首次在博客频道发布, 我之前一直想写但没有机会来整理这套系统的…