当前位置: 首页 > article >正文

(1-6-1)Java 集合

目录

0.知识概述:

1.集合

1.1 集合继承关系类图

1.2 集合遍历的三种方式

1.3 集合排序

 1.3.1 Collections实现

1.3.2 自定义排序类

2 List 集合概述

2.1 ArrayList 

(1)特点

(2)常用方法

2.2 LinkedList

3. Set集合

3.1 概述

(1)特点

(2)重要方法

(3)Set集合的唯一性(hashCode() -> equals())

3.2 HashSet

3.3 LinkedHashSet

3.4 TreeSet

4.Map

4.1 概述

4.1.1 特点 & 继承关系

4.1.2 遍历集合的三种方式

4.2 HashMap

4.3 LinkedHashMap

4.4 TreeMap


0.知识概述:



1.集合

1.1 集合继承关系类图

1.2 集合遍历的三种方式

/*  遍历集合的三种方式:01 -> for 循环遍历02 -> forEach  方法遍历03 -> Iterator  迭代器遍历*/

代码实现:

System.out.println(dmList);     //[斗罗, 沧源图, 仙逆, 凡人, 斗破, 吞噬星空]/*  遍历集合的三种方式:01 -> for 循环遍历02 -> forEach  方法遍历03 -> Iterator  迭代器遍历*/// 法1:for(String dm: dmList){System.out.print(dm+" ");}                                 //斗罗 沧源图 仙逆 凡人 斗破 吞噬星空System.out.println();// 法2:dmList.forEach(dm->{System.out.print(dm + " ");   //斗罗 沧源图 仙逆 凡人 斗破 吞噬星空});System.out.println();// 法3:Iterator<String> itr = dmList.iterator();while(itr.hasNext()){String dm = itr.next();   // 提取下一个元素, 同时指针向后移动System.out.print(dm);}                             // 斗罗沧源图仙逆凡人斗破吞噬星空System.out.println();

1.3 集合排序

 1.3.1 Collections实现
方式1: Collections.sort(list);
方式2: 创建一个内部类继承Comparator, 实现其compare

code:

public class ListSorter {// 方式1: Collections.sort(list);public static List<Integer> sort1(List<Integer> list){Collections.sort(list);System.out.println(list);         //[18, 25, 45, 49]return list;}// 方式2: 创建一个内部类继承Comparator, 实现其compareclass CompareDemo implements Comparator<Integer> {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}}public  List<Integer> sort2(List<Integer> list){Collections.sort(list, new CompareDemo());System.out.println(list);              // [49, 45, 25, 18]return list;}public static void main(String[] args) {List<Integer> alist = new ArrayList<>();alist.add(25);alist.add(45);alist.add(49);alist.add(18);System.out.println(alist);            //[25, 45, 49, 18]System.out.println(alist.toString()); //[25, 45, 49, 18]System.out.println(ListSorter.sort1(alist));  //[18, 25, 45, 49]ListSorter ls = new ListSorter();System.out.println(ls.sort2(alist));  //[49, 45, 25, 18]}
}
1.3.2 自定义排序类
public class TestSort {class CarSortDemo implements Comparator<Car> {// 01 比较car 对象
//        @Override
//        public int compare(Car o1, Car o2) {
//            return o1.equals(o2) ? 0 : 1;
//        }// 02 比较car 对象的  sn属性值
//        @Override
//        public int compare(Car o1, Car o2) {
//            return o1.getSn().compareTo(o2.getSn());
//        }// 03 比较car 对象的  brand 属性值public int compare(Car o1, Car o2){return o2.getModel().compareTo(o1.getModel());}}public List<Car> sort(List<Car> list){Collections.sort(list, new CarSortDemo());return list;}public static void main(String[] args) {List<Car> carsList = new ArrayList<>();carsList.add(new Car("217893","baoma"));carsList.add(new Car("689326","su7"));carsList.add(new Car("859032","aodi"));carsList.add(new Car("785932","benchi"));carsList.add(new Car("238979","biyadi"));System.out.println(carsList);
//[Car{sn='217893', model='baoma'}, Car{sn='689326', model='su7'}, Car{sn='859032', model='aodi'}, Car{sn='785932', model='benchi'}, Car{sn='238979', model='biyadi'}]System.out.println(new TestSort().sort(carsList));// 01 比较car 对象
//[Car{sn='217893', model='baoma'}, Car{sn='689326', model='su7'}, Car{sn='859032', model='aodi'}, Car{sn='785932', model='benchi'}, Car{sn='238979', model='biyadi'}]// 02 比较car 对象的  sn属性值
//[Car{sn='217893', model='baoma'}, Car{sn='238979', model='biyadi'}, Car{sn='689326', model='su7'}, Car{sn='785932', model='benchi'}, Car{sn='859032', model='aodi'}]// 03 比较car 对象的  brand 属性值
//[Car{sn='689326', model='su7'}, Car{sn='238979', model='biyadi'}, Car{sn='785932', model='benchi'}, Car{sn='217893', model='baoma'}, Car{sn='859032', model='aodi'}]}
}


2 List 集合概述

有关List的相关继承关系:


2.1 ArrayList 

(1)特点

(2)常用方法
/*** ArrayList   ->* 01. ArrayList<String> nickList = new ArrayList<String>();* 02. nickList.add("phdvb");*     nickList.add(1,"pxq");*     nickList.get(2)* 03. nickList.set(2, "drl");* 04. nickList.remove("phdvc");*     remove(listSize-1);*     nickList.size();*/
public class ArrayListDemo {public static void main(String[] args) {/*** ArrayList   ->* 01. ArrayList<String> nickList = new ArrayList<String>();* 02. nickList.add("phdvb");*     nickList.add(1,"pxq");*     nickList.get(2)* 03. nickList.set(2, "drl");* 04. nickList.remove("phdvc");*     remove(listSize-1);*     nickList.size();*///01 创建ArrayList对象ArrayList<String> nickList = new ArrayList<String>();//02 往ArrayList中添加数据nickList.add("phdvb");nickList.add("phdva");boolean isChange = nickList.add("phdvb");System.out.println("ArrayList是否发生变化?"+ isChange); //ArrayList是否发生变化?trueSystem.out.println(nickList);   //[phdvb, phdva, phdvb]System.out.println(nickList.get(2));  //phdvbnickList.add(1,"pxq");System.out.println(nickList);   //[phdvb, pxq, phdva, phdvb]nickList.add("phdvb");nickList.add("phdvc");nickList.add("phdvc");nickList.add("phdvd");//03 更新ArrayList中的元素String beforeNick = nickList.set(2, "drl");System.out.println(beforeNick); //phdvaSystem.out.println(nickList);   //[phdvb, pxq, drl, phdvb, phdvb, phdvb, phdvc, phdvd]//04 删除ArrayList中的元素boolean isRemove = nickList.remove("phdvc");System.out.println(isRemove);   //trueSystem.out.println(nickList);   //仅删除了一个元素,[phdvb, pxq, drl, phdvb, phdvb, phdvc, phdvd]int listSize = nickList.size();System.out.println(listSize);   //7nickList.remove(listSize-1);System.out.println(nickList);   //[phdvb, pxq, drl, phdvb, phdvb, phdvc]nickList.set(nickList.size()-2, "vb");System.out.println(nickList);   //[phdvb, pxq, drl, phdvb, vb, phdvc]}
}

2.2 LinkedList

代码实现:

public class LinkedListDemo {public static void main(String[] args) {LinkedList<String> dmList = new LinkedList<String>();dmList.add("仙逆");dmList.add("凡人");dmList.add("斗破");System.out.println(dmList);     //[仙逆, 凡人, 斗破]dmList.add(0, "沧源图");System.out.println(dmList);     //[沧源图, 仙逆, 凡人, 斗破]// 实现的是 Deque接口 中的方法dmList.addFirst("斗罗");dmList.addLast("吞噬星空");System.out.println(dmList);     //[斗罗, 沧源图, 仙逆, 凡人, 斗破, 吞噬星空]}
}

3. Set集合

3.1 概述

(1)特点

 Set集合接口间的实现关系:

(2)重要方法

代码实现:

public class HashSetDemo {public static void main(String[] args) {// 实例化一个 Set集合Set<String> gameSet = new HashSet<String>();gameSet.add("夏洛特");gameSet.add("貂蝉");gameSet.add("戈雅");gameSet.add("不知火舞");System.out.println(gameSet);       //[不知火舞, 戈雅, 夏洛特, 貂蝉]// add()返回值代表是否真正在集合中插入元素boolean isChanged = gameSet.add("米莱迪");System.out.println(gameSet);       //[不知火舞, 戈雅, 夏洛特, 貂蝉, 米莱迪]System.out.println(isChanged);     //trueisChanged = gameSet.add("貂蝉");System.out.println(gameSet);       // [不知火舞, 戈雅, 夏洛特, 貂蝉, 米莱迪]System.out.println(isChanged);     // false// Set 可以 使用所有 Collection 接口定义方法int size = gameSet.size();System.out.println(size);          // 5boolean isContain = gameSet.contains("夏洛特");System.out.println(isContain);     // true}
}
(3)Set集合的唯一性(hashCode() -> equals())
/*** Q1 : Set集合如何确保数据的  唯一性*//*** A1 : Set集合在新增数据时, 先会判断hashCode() 是否已存在*      若新增的hashCode() 在Set集合中存在, 在调用equals () 进行 值比较;*      新增的hashCode() 与 equals() 都存在的情况下*      Set集合认为数据已存在,不予新增*/

/*** Q2: 直接使用equals()判断不行吗?*//*** A2: 出于执行效率老驴*     hashCode() 返回的整数结果  决定了其将Set集合中的存放位置*     由于相比于Equals()方法hashCode()计算速度会很快,  但是有可能发生哈希碰撞*     所以equals再次会发生哈希碰撞的值进行比较*/

School类(重写了hashCode()、equals()、toString())

public class School {private String name;private String addr;public School(String name, String addr) {setAddr(addr);setName(name);}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}public String getName() {return name;}public void setName(String name) {this.name = name;}// 重写Object类的 toString()方法@Overridepublic String toString() {return this.hashCode() + "= School{" +"name='" + name + '\'' +"addr='" + addr + '\'' +"}";}@Overridepublic int hashCode() {
//        return super.hashCode();return this.name.hashCode();}@Overridepublic boolean equals(Object obj) {
//        return super.equals(obj);if(obj instanceof School){School school = (School)obj;if(this.name.equals(((School)obj).getName())){return true;}else{return false;}}else{return false;}}}

Test类

public class SetConsistent {public static void main(String[] args) {String sa = "西交大";String sb = "西工大";System.out.println("sa.hashCode():" + sa.hashCode() +",sa.hashCode():" + sb.hashCode());//  sa.hashCode():34473154,sa.hashCode():34594209HashSet<School> schoolHashSet = new HashSet<School>();schoolHashSet.add(new School(sa,"西安"));schoolHashSet.add(new School(sb,"西安"));schoolHashSet.add(new School("克职","克拉玛依"));schoolHashSet.add(new School("克职","克拉玛依"));System.out.println(schoolHashSet);//[1956725890= School{name='克职'addr='克拉玛依'},// 1163157884= School{name='西工大'addr='西安'},// 460141958= School{name='西交大'addr='西安'}]}
}

3.2 HashSet

数据存放实例:


3.3 LinkedHashSet

数据存放示例:

代码演示:

public class LinkedHashSetDemo {public static void main(String[] args) {Set<String> langSet= new LinkedHashSet<String>();langSet.add("Java");langSet.add("Python");langSet.add("C#");langSet.add("C++");System.out.println(langSet);    //[Java, Python, C#, C++]}
}

3.4 TreeSet

code01:

public class TreeSetDemo {public static void main(String[] args) {Set<Integer> tSet = new TreeSet<Integer>();tSet.add(108);tSet.add(139);tSet.add(75);tSet.add(64);tSet.add(225);System.out.println(tSet);   //[64, 75, 108, 139, 225]TreeSetDemo td = new TreeSetDemo();td.sort();                  //[226, 140, 109, 76, 65]}// 重写Comparator接口中的compare方法,  实现自定义比较逻辑class IntegerComparator implements Comparator<Integer> {public int compare(Integer o1, Integer o2) {return o2 -o1;}}public void sort(){Set<Integer> tSet = new TreeSet<Integer>(new IntegerComparator());tSet.add(109);tSet.add(140);tSet.add(76);tSet.add(65);tSet.add(226);System.out.println(tSet);       //[226, 140, 109, 76, 65]}
}

4.Map

4.1 概述

4.1.1 特点 & 继承关系

4.1.2 遍历集合的三种方式
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;public class LoopMapThreeWays {// 遍历集合//方式1: 增强for循环public void doForLoop(Map map){Set<String> keys = map.keySet();for(String key : keys){System.out.println(key + ":" + map.get(key));}}// 方式2: lambda 表达式public void doForLoop2(Map map){map.forEach((key, value) ->{System.out.println(key + ":" + value);});}// 方式3: 使用迭代器public void doForLoop3(Map map){Iterator<Map.Entry<String, Object>> itr = map.entrySet().iterator();while(itr.hasNext()){Map.Entry<String, Object> entry = itr.next();System.out.println(entry.getKey() + ":" + entry.getValue());}}public static void main(String[] args) {Map<String, Object> xlt = new LinkedHashMap<>();xlt.put("name", "夏洛特");xlt.put("nick", "玫瑰剑士");xlt.put("技能", "七星光芒剑");xlt.put("技能", "七星光芒斩");xlt.put("皮肤1", "浮生王");xlt.put("皮肤2", "金色皮");System.out.println(xlt);
//{name=夏洛特, nick=玫瑰剑士, 技能=七星光芒斩, 皮肤1=浮生王, 皮肤2=金色皮}LoopMapThreeWays lm = new LoopMapThreeWays();lm.doForLoop(xlt);System.out.println("——————————————————————————————————————————");lm.doForLoop2(xlt);System.out.println("——————————————————————————————————————————");lm.doForLoop3(xlt);/*name:夏洛特nick:玫瑰剑士技能:七星光芒斩皮肤1:浮生王皮肤2:金色皮*/}
}

4.2 HashMap

code:

import java.util.HashMap;
import java.util.Map;public class HashMapDemo {public static void main(String[] args) {Map<String, Object> xlt = new HashMap<String, Object>();xlt.put("name", "夏洛特");xlt.put("nick", "玫瑰剑士");xlt.put("技能", "七星光芒剑");xlt.put("技能", "七星光芒斩");System.out.println(xlt);        //{nick=玫瑰剑士, 技能=七星光芒斩, name=夏洛特}String heroNick = (String) xlt.get("nick");System.out.println(heroNick);   //玫瑰剑士System.out.println(xlt.containsKey("技能"));    //trueSystem.out.println(xlt.containsKey("皮肤"));    //falsexlt.put("皮肤1", "浮生王");int count = xlt.size();System.out.println(count);         //4xlt.put("皮肤2", "金色皮");System.out.println(xlt);           //{nick=玫瑰剑士, 技能=七星光芒斩, 皮肤2=金色皮, 皮肤1=浮生王, name=夏洛特}String removeValur = (String)xlt.remove("皮肤2");System.out.println(removeValur);   //金色皮}
}

4.3 LinkedHashMap

public class LinkedHashMapDemo {public static void main(String[] args) {Map<String, Object> xlt = new LinkedHashMap<>();xlt.put("name", "夏洛特");xlt.put("nick", "玫瑰剑士");xlt.put("技能", "七星光芒剑");xlt.put("技能", "七星光芒斩");xlt.put("皮肤1", "浮生王");xlt.put("皮肤2", "金色皮");System.out.println(xlt);
//{name=夏洛特, nick=玫瑰剑士, 技能=七星光芒斩, 皮肤1=浮生王, 皮肤2=金色皮}}
}

4.4 TreeMap


import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;public class TreeMapDemo {public static void main(String[] args) {/*正常需求测试1:*/Map<Object, Object> tMap = new TreeMap<Object, Object>();tMap.put("a2", 589);tMap.put("a1", "vb");tMap.put("b4", "运还是重要的");tMap.put("b5", "自信也重要");tMap.put("b2", 3.5);System.out.println(tMap);
//{a1=vb, a2=589, b2=3.5, b4=运还是重要的, b5=自信也重要}/*比较方法重写测试2:*/TreeMapDemo td = new TreeMapDemo();td.sort();   //{b5=自信也重要, b4=运还是重要的, b2=3.5, a2=589, a1=vb}}class tMapComparator implements Comparator<String> {@Overridepublic int compare(String o1, String o2) {return o2.compareTo(o1);}}public void sort(){Map<String, Object> t2Map = new TreeMap<>(new tMapComparator());t2Map.put("a2", 589);t2Map.put("a1", "vb");t2Map.put("b4", "运还是重要的");t2Map.put("b5", "自信也重要");t2Map.put("b2", 3.5);System.out.println(t2Map);}
}

相关文章:

(1-6-1)Java 集合

目录 0.知识概述&#xff1a; 1.集合 1.1 集合继承关系类图 1.2 集合遍历的三种方式 1.3 集合排序 1.3.1 Collections实现 1.3.2 自定义排序类 2 List 集合概述 2.1 ArrayList &#xff08;1&#xff09;特点 &#xff08;2&#xff09;常用方法 2.2 LinkedList 3…...

spring5-配外部文件-spEL-工厂bean-FactoryBean-注解配bean

spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…...

[安全清单] Linux 服务器安全基线:一份可以照着做的加固 Checklist

更多服务器知识&#xff0c;尽在hostol.com 嘿&#xff0c;各位服务器的“守护者”们&#xff01;当你拿到一台崭新的Linux服务器&#xff0c;或者接手一台正在运行的服务器时&#xff0c;脑子里是不是会闪过一丝丝关于安全的担忧&#xff1f;“我的服务器安全吗&#xff1f;”…...

企业级单元测试流程

企业级的单元测试流程不仅是简单编写测试用例&#xff0c;而是一整套系统化、自动化、可维护、可度量的工程实践&#xff0c;贯穿从代码编写到上线部署的全生命周期。下面是一个尽可能完善的 企业级单元测试流程设计方案&#xff0c;适用于 Java 生态&#xff08;JUnit Mockit…...

安卓开发用到的设计模式(2)结构型模式

安卓开发用到的设计模式&#xff08;2&#xff09;结构型模式 文章目录 安卓开发用到的设计模式&#xff08;2&#xff09;结构型模式1. 适配器模式&#xff08;Adapter Pattern&#xff09;2. 装饰器模式&#xff08;Decorator Pattern&#xff09;3. 代理模式&#xff08;Pro…...

JavaWeb:SpringBoot配置优先级详解

3种配置 打包插件 命令行 优先级 SpringBoot的配置优先级决定了不同配置源之间的覆盖关系&#xff0c;遵循高优先级配置覆盖低优先级的原则。以下是详细的优先级排序及配置方法说明&#xff1a; 一、配置优先级从高到低排序 1.命令行参数 优先级最高&#xff0c;通过keyvalu…...

故障率预测:基于LSTM的GPU集群硬件健康监测系统(附Prometheus监控模板)

一、GPU集群健康监测的挑战与价值 在大规模深度学习训练场景下&#xff0c;GPU集群的硬件故障率显著高于传统计算设备。根据2023年MLCommons统计&#xff0c;配备8卡A100的服务器平均故障间隔时间&#xff08;MTBF&#xff09;仅为1426小时&#xff0c;其中显存故障占比达38%&…...

【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 -1 项目功能描述

1 项目功能描述 # 智慧社区-小程序-1 欢迎页-加载后端&#xff1a;动态变化-2 首页-轮播图&#xff1a;动态-公共栏&#xff1a;动态-信息采集&#xff0c;社区活动&#xff0c;人脸检测&#xff0c;语音识别&#xff0c;心率检测&#xff0c;积分商城-3 信息采集页面-采集人数…...

FFmpeg 安装包全攻略:gpl、lgpl、shared、master 区别详解

这些 FFmpeg 安装包有很多版本和变种&#xff0c;主要区别在于以下几个方面&#xff1a; ✅ 一、从名称中看出的关键参数&#xff1a; 1. 版本号 master&#xff1a;开发版&#xff0c;最新功能&#xff0c;但可能不稳定。n6.1 / n7.1&#xff1a;正式版本&#xff0c;更稳定…...

AI浪潮下,媒体内容运营的五重变奏

算法驱动的个性化推荐 在信息爆炸的时代,用户面临着海量的内容选择,如何让用户快速找到感兴趣的人工智能内容,成为媒体运营的关键。算法驱动的个性化推荐模式应运而生,它通过分析用户的行为数据,如浏览历史、点赞、评论、搜索关键词等,构建用户兴趣画像 ,再依据画像为用…...

WindTerm 以 SSH 协议的方式通过安恒明御堡垒机间接访问服务器

1. 配置堡垒机秘钥 创建公私钥ssh-keygen -t rsa -b 4096执行完该命令后按照提示一路回车就能够创建出公私钥注意&#xff1a;在创建过程中会让你指定秘钥的存储位置以及对应的密码&#xff0c;最好自行指定一下 id_rsa 是私钥id_rsa.pub 是公钥 在堡垒机中指定创建好的私钥 …...

通过现代数学语言重构《道德经》核心概念体系,形成一个兼具形式化与启发性的理论框架

以下是对《道德经》的数学转述尝试&#xff0c;通过现代数学语言重构其核心概念&#xff0c;形成一个兼具形式化与启发性的理论框架&#xff1a; 0. 基础公理体系 定义&#xff1a; 《道德经》是一个动态宇宙模型 U(D,V,Φ)&#xff0c;其中&#xff1a; D 为“道”的无限维…...

邂逅Node.js

首先先要来学习一下nodejs的基础&#xff08;和后端开发有联系的&#xff09; 再然后的学习路线是学习npm&#xff0c;yarn&#xff0c;cnpm&#xff0c;npx&#xff0c;pnpm等包管理工具 然后进行模块化的使用&#xff0c;再去学习webpack和git&#xff08;版本控制工具&…...

计算机视觉(图像算法工程师)学习路线

计算机视觉学习路线 Python基础 常量与变量 列表、元组、字典、集合 运算符 循环 条件控制语句 函数 面向对象与类 包与模块Numpy Pandas Matplotlib numpy机器学习 回归问题 线性回归 Lasso回归 Ridge回归 多项式回归 决策树回归 AdaBoost GBDT 随机森林回归 分类问题 逻辑…...

GITLIbCICD流水线搭建

1&#xff0c;搭建gitLIb服务器&#xff0c;创建gitlibRunner 并且注册&#xff0c; 2. 写dockerfile 包块java程序运行的环境&#xff0c;jdk&#xff0c;参数等 &#xff0c; 2.1ai生成版本&#xff0c; # 基础镜像&#xff08;JDK 17&#xff09;FROM eclipse-temurin:1…...

详细介绍Qwen3技术报告中提到的模型架构技术

详细介绍Qwen3技术报告中提到的一些主流模型架构技术&#xff0c;并为核心流程配上相关的LaTeX公式。 这些技术都是当前大型语言模型&#xff08;LLM&#xff09;领域为了提升模型性能、训练效率、推理速度或稳定性而采用的关键组件。 1. Grouped Query Attention (GQA) - 分组…...

【慧游鲁博】【8】前后端用户信息管理:用户基本信息在小程序端的持久化与随时获取

文章目录 本次更新整体流程概述1. 用户登录流程前端登录处理 (login.vue)后端登录处理 (AuthServiceImpl.java) 2. 用户信息存储机制前端状态管理 (member.js) 3. 后续请求的身份验证登录拦截器 (LoginInterceptor.java)前端请求携带token 4. 获取用户信息获取用户信息接口 (Us…...

上位机知识篇---keil IDE操作

文章目录 前言文件操作按键新建打开保存保存所有编辑操作按键撤销恢复复制粘贴剪切全选查找书签操作按键添加书签跳转到上一个书签跳转到下一个书签清空所有书签编译操作按键编译当前文件构建目标文件重新构建调试操作按键进入调试模式复位全速运行停止运行单步调试逐行调试跳出…...

Odoo: Owl Hooks 深度解析技术指南

你好&#xff01;作为一名 Odoo 开发者&#xff0c;深入理解其前端框架 Owl.js&#xff0c;尤其是 Hooks&#xff0c;是提升开发效率和代码质量的关键。这份指南将带你从基础概念到高级应用&#xff0c;全面掌握 Odoo 18 中 Owl Hooks 的所有知识点。 1. Hooks 核心概念介绍 什…...

SpringBoot返回xml

默认情况下引入web依赖后自带了JackJson 返回JSON数据 你也可以引入fastJSON 那么方便使用可以用JSON.xxx 如果希望Boot默认返回xml数据 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml<…...

【案例篇】 实现简单SSM工程-后端

简介 本篇文章将带你从0到1的实现一个SSM项目&#xff0c;通过此案例可以让你在项目中对SpringBoot的使用有一个更加详细的认识&#xff0c;希望这个简单的案例能够帮到你。文章内容若存在错误或需改进的地方&#xff0c;欢迎大家指正&#xff01;若对操作有任何疑问欢迎留言&a…...

零基础学习计算机网络编程----网络基本知识

目录 1. 计算机网络发展 1.1 网络发展 1.2 媒介 2 认识协议 2.1 为什么要有协议 2.2 协议的本质 3 网络协议的初识 3.1 什么是协议分层 3.2 为什么会有 4. OSI七层模型 4.1 定义 5. TCP/IP五层(或四层)模型 5.1 有什么 6. 网络传输基本流程 6.1 网络传输流程图…...

Zynq和Microblaze的区别和优势

Zynq芯片包含了一颗双核ARM Cortex-A9处理器&#xff0c;这是一颗“硬”处理器---它是芯片上专用 而且优化过的硅片原件。 MicroBlaze为“软”处理器&#xff0c;它是由可编程逻辑部分的单元组合而成的&#xff0c; 也就是说&#xff0c;一个 软处理器的实现和部署在FPGA的逻…...

FastAPI 支持文件下载

FastAPI 支持文件下载 FastAPI 支持文件上传 Python 获取文件类型 mimetype 文章目录 1. 服务端处理1.1. 下载小文件1.2. 下载大文件&#xff08;yield 支持预览的&#xff09;1.3. 下载大文件&#xff08;bytes&#xff09;1.4. 提供静态文件服务 2. 客户端处理2.1. 普通下载2…...

CNN卷积神经网络到底卷了啥?

参考视频&#xff1a;卷积神经网络&#xff08;CNN&#xff09;到底卷了啥&#xff1f;8分钟带你快速了解&#xff01; 我们知道&#xff1a; 图片是由像素点构成&#xff0c;即最终的成像效果是由背后像素的颜色数值所决定 在Excel中&#xff1a;有这样一个由数值0和1组成的66…...

vue中v-clock指令

基础 v-cloak 是 Vue 中的一个非常实用的指令&#xff0c;用于防止在 Vue 实例尚未挂载完成前&#xff0c;用户看到模板中的插值语法&#xff08;如 {{ message }}&#xff09;一闪而过。 ✅ 场景举例 你在页面还没加载完前&#xff0c;可能会看到这样一瞬间的内容&#xff…...

MIT 6.S081 2020Lab5 lazy page allocation 个人全流程

文章目录 零、写在前面一、Eliminate allocation from sbrk()1.1 说明1.2 实现 二、Lazy allocation2.1 说明2.2 实现 三、Lazytests and Usertests3.1 说明3.2 实现3.2.1 lazytests3.2.2 usertests 零、写在前面 可以阅读下4.6页面错误异常 像应用程序申请内存&#xff0c;内…...

C++初阶-list的使用2

目录 1.std::list::splice的使用 2.std::list::remove和std::list::remove_if的使用 2.1remove_if函数的简单介绍 基本用法 函数原型 使用函数对象作为谓词 使用普通函数作为谓词 注意事项 复杂对象示例 2.2remove与remove_if的简单使用 3.std::list::unique的使用 …...

PHP序列化数据格式详解

PHP序列化数据格式详解 概述 PHP序列化是将PHP变量&#xff08;包括对象&#xff09;转换为可存储或传输的字符串表示形式的过程。了解这些序列化格式对于数据处理、调试和安全性分析非常重要。本文将详细介绍PHP中各种数据类型的序列化表示方式。 基本数据类型序列化格式 …...

如何优化 MySQL 存储过程的性能?

文章目录 1. 优化 SQL 语句避免全表扫描减少子查询&#xff0c;改用 JOIN避免 SELECT 2. 合理使用索引3. 优化存储过程结构减少循环和临时变量避免重复计算 4. 使用临时表和缓存5. 优化事务处理6. 分析和监控性能7. 优化数据库配置8. 避免用户自定义函数&#xff08;UDF&#…...