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

第十三章 集合

一、集合的概念

集合:将若干用途、性质相同或相近的“数据”组合而成的一个整体

Java集合中只能保存引用类型的数据,不能保存基本类型数据

数组的缺点:长度不可变

Java中常用集合:

1.Set(集):集合中的对象不按特定方式排序,并且没有重复对象

2.List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许按索引位置索引对象

3.Map(映射):集合中的每个元素包含一个键对象和值对象,集合中没有重复的键对象,值对象可以重复

二、Collection接口

public class CollectionTest {public static void main(String[] args) {//Collection是接口,需要用实现类创建对象Collection c = new ArrayList();//集合中保存多少长度System.out.println("获取集合的长度"+c.size());//如果没有数据返回true,有数据返回falseSystem.out.println("判断集合是否为空"+c.isEmpty());//往集合中添加数据用add方法c.add("张三");//集合中是不能保存基本数据类型的,只能保存对象类型//而基本数据类型可以保存的原因是jdk1.5之后基本数据类型会跟包装类类型进行默认转换c.add(123);c.add(true);c.add('a');c.add(99.5);//集合重写了Object的toString方法,所以打印显示的内容不是地址System.out.println(c);System.out.println(c.size());//删除集合中的数组c.remove(123);System.out.println(c);//删除数据之后集合的长度会发生改变,但是数组的长度不会System.out.println(c.size());//将集合转换为数组的方法Object []objects = c.toArray();for(Object o :objects){System.out.println(o + " ");}}
}

三、Iterator接口

Iterator接口的作用:遍历容器中的元素

Iterator接口的方法:

boolean hasNext()

Object next()

void remove()

public class IteratorTest {public static void main(String[] args) {//Collection是接口,需要用实现类创建对象Collection c = new ArrayList();c.add(123);c.add(true);c.add('a');c.add(99.5);//使用迭代器遍历集合Iterator it = c.iterator();//hasNext方法用于判断后面是否还有数据,如果有则返回true,如果没有数组则返回falsewhile(it.hasNext()){//next方法用于获取集合中的数据System.out.println(it.next());}}
}

四、Set

1.Set接口未提供额外的方法

2.Set的实现类:HashSet、TreeSet

3.HashSet类:按照哈希算法存取集合中的对象

(1)哈希算法判断集合中的元素是否重复,先判断对象的hashcode,然后使用equals()方法

(2)为了使HashSet正常工作,类重写equals()方法时必须重写hashcode()方法,以保证两个引用同一对象的两个变量的hashcode也一致

4.TreeSet:能够对集合中的对象进行自动排序

(1)集合中的对象必须可以比较

(2)自然排序:集合中的对象进行比较,然后进行升序排列

                集合中对象的类必须实现java.lang.Comparable接口,使用compareTo()方法进行比较

                Java类库中实现Comparable接口的常用类

(3)自定义排序

如果希望TreeSet类的对象按着自定义方式排序,需要让集合中对象的类实现java.util.Comparator接口

5.set集合不可以重复的不仅仅是同一个对象不能保存进set集合,不同对象,内容相同的也不能保存进集合中说到比较首先想到的是equals但是set集合为了提交比较效率会先进行hash比较,hash值是对象的内容经过一系列hash计算,得到的一个整数。如果两个对象的hash值不同,则表示不是同一个对象,如果hash值相同,则证明这两个对象可能是同一个对象,要进行equals比较,方法出现hash值相同,但是内容不同的情况偶然发生。

public class SetTest {public static void main(String[] args) {//set集合特点,无序(指添加到集合中的顺序和显示集合的顺序不一致+)不可以重复Set set = new HashSet();set.add(123);set.add(true);set.add('a');set.add(99.5);//set集合无序不可以重复,不仅仅是同一个对象不能重复,不同对象内容重复也不能保存到set集合里String s1 = "world";String s2 = new String("world");set.add(s1);set.add(s2);System.out.println(set);}
}
public class Test {public static void main(String[] args) {Set set = new HashSet();Student s1 = new Student(1001,'l',18);Student s2 = new Student(1001,'l',18);Student s3 = new Student(1001,'s',20);set.add(s1);set.add(s2);set.add(s3);System.out.println(set);}
}
class Student{int no;char name;int age;public Student (int no,char name,int age){this.age = age;this.name = name;this.no = no;}//要想让自己写的类在set集合中正常保存,就需要重写equals的同时重写hashCode方法//正常保存指的是同一个对象不能保存进集合中,不同对象内容相同也不能保存进集合中@Overridepublic boolean equals(Object o) {if(this == o ){return true;}//判断o对象是不是有Student创建的if(o instanceof Student){Student s = (Student)o;//在逐一比较每个属性的值是否相同if (age == s.age&&name ==s.name&&no==s.no){return true;}}return false;}@Overridepublic int hashCode() {return age*5+name*5+no*5;}
}

五、List

1.List元素都对应一个整数类型的序号记录其在集合中的位置,可以根据序号存取集合中的元素

2.List的实现类:ArrayList、LinkedList等

3.Arrays补充方法:List asList(数组类型 a)

4.ArrayList:

(1)代表长度可变的数组

(2)查询速度较快、增删改速度较慢

5.LinkedList:

 (1)采用链表数据结构,对顺序访问进行优化

 (2)增删改速度较快,查询速度较慢

注意:一定要实际问题实际分析,规律可能会发生变化

public class ListTest {public static void main(String[] args) {//list集合有序可以重复,可以通过索引获取对应位置的数据List list = new LinkedList();list.add(123);list.add("hello");list.add(false);list.add(true);list.add(98.2);list.add('l');System.out.println(list);//get方法,通过索引获取对应位置的数据System.out.println("获取索引为2,第三个位置的数据"+list.get(2));//set方法,修改指定位置的数据的值list.set(1,"hello world");System.out.println(list);//在指定索引位置添加数据list.add(1,"hello");System.out.println(list);//删除指定索引位置的数据list.remove(1);System.out.println(list);//将数组转换为集合,那么数组保存数据类型必须是对象类型,基本数据类型要使用包装类Integer[] a = {1,2,3,4,5,6,7,8,9};List list1 = Arrays.asList(a);System.out.println(list1);//List集合的便利形式//第一种转换数组在遍历Object[] object = list1.toArray();for (Object o: object){System.out.print(o + " ");}System.out.println();//第二中使用迭代器遍历Iterator it = list1.iterator();while (it.hasNext()){System.out.print(it.next()+" ");}System.out.println();//第三种,直接遍历使用get方法获取数据for (int i=0;i<list1.size();i++){System.out.print(list1.get(i)+" ");}System.out.println();//第四种使用foreach循环遍历for(Object o:list1){System.out.print(o + " ");}}}

六、Map

1.Map中存储的元素通常都是由key来表示,所以同一Map中key值不能重复,value值无要求

2.Map的实现类:HashMap、TreeMap

3.Map接口的属性:Entry——映射项(键-值对)

public class MapTest {public static void main(String[] args) {Map map = new HashMap();//Map集合以键值对的形式保存数据,键不能重复,值可以重复//put方法往Map集合中保存数据map.put("a","123");map.put(1,false);map.put('a',95.5);map.put(true,100);System.out.println(map);//map集合保存数据要求key不能重复,但是如果重复了也不会报错//会用心地value值将之前的数据覆盖掉map.put(true,200);System.out.println(map);//get方法,根据key值获取对应的value值System.out.println(map.get(true));//根据key值删除map集合中的数据map.remove('a');//当要删除的key不存在的时候,代码书写执行不会报错,就是没有删除而已map.remove(false);System.out.println(map);System.out.println("获取map集合中的元素个数" + map.size());//clear清空集合//map.clear()//遍历map集合//1.通用遍历形式 最通用Set set = map.entrySet();Iterator it = set.iterator();while (it.hasNext()){Map.Entry entry = (Map.Entry) it.next();System.out.println("保存数据时候的key值" + entry.getKey());System.out.println("保存数据时候的value值" + entry.getValue());System.out.println();}//2.特殊形式的遍历Map map1 = new HashMap();//当key值都是有规律的,且不同的是一段连续的数字,那么就可以通过get方法来获取//数据,从而遍历集合map1.put("item0","123");map1.put("item1","true");map1.put("item2",'k');map1.put("item3","k");map1.put("item4",1000);for (int i = 0;i<map1.size();i++){System.out.println(map1.get("item"+i));}}}

七、Collections类

java.util.Collections类:提供一系列的基于集合操作的常用静态方法

public class CollectionsTest {//Collection类是专门操作集合的类public static void main(String[] args) {List list = new ArrayList();list.add("hello");list.add("zhangsan");list.add("zhao");list.add("wangwu");list.add("liuxuiang");list.add("zhaoliu");//排序Collections.sort(list);System.out.println(list);//倒序Collections.reverse(list);System.out.println(list);//乱序Collections.shuffle(list);System.out.println(list);}
}
public class Demo {public static void main(String[] args) {List list = new ArrayList();Teacher t1 = new Teacher(1001,"张三",18);Teacher t2 = new Teacher(1002,"张四",19);Teacher t3 = new Teacher(1003,"张五",20);list.add(t1);list.add(t2);list.add(t3);Collections.sort(list);System.out.println(list);}
}
class Teacher implements Comparable{int no;String name;int age;public Teacher (int no,String name,int age){this.no = no;this.name = name;this.age = age;}@Overridepublic String toString() {return "Teacher{" +"no=" + no +", name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(Object o) {if (o instanceof Teacher){Teacher t = (Teacher) o;//this 表示的是前一个数, o表示的是数组中的后一个数·//-1表示不需要交换,正数表示需要交换返回正数就行if (t.age>this.age){return -1;} else if(t.age<this.age){return 1;}}return 0;}
}

八、泛型

1.为何使用泛型?

进入集合的对象都当作Object类型,从而失去了自己的类型;取出后也是Object类型,使用前通常要进行强制转换容易出现ClassCastException异常

2.原因:装入集合的时候无法指定装入的元素是何种类型

3.泛型:

(1)装入集合的时候指定元素的具体的类型

(2)增强程序的稳定性与可读性

4.集合中使用泛型

5.定义泛型类

(1)使用<T>用来声明一个型态持有者名称T(可以替换其它标示符)

(2)在定义泛型类时,可以声明多个泛型类型

              一般形式:class 类名称 <T1,T2> 

(3)声明及配置对象时不一定指定型态,默认会使用Object型态,编译时编译程序会提出警告

(4)可以使用泛型机制来声明一个数组(可以用数组代理T)

(5)不可以使用泛型来建立数组的实例(不能new T[])

6.限制泛型的可用类型

一般形式:class 类名称 <T extends anyClass>

anyClass为类或接口,此类中的泛型必须是实现或继承了anyClass

7.使用类型通配符

一般形式:泛型名称<? extends anyClass>(设定上限)

一般形式:泛型名称<? super anyClass>(设定下限)

public class GenericTest {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("123");list.add("hello");//添加泛型之后,在想往集合中和保存其它类型的数据就会报错//list.add(123)System.out.println(list);//泛型不会让保存到集合中的数据丢失自己本身的类型,所以取值的时候就不需要进行类型转换了Iterator<String> it = list.iterator();while (it.hasNext()){String s = it.next();System.out.println(s);}//集合中只能保存对象类型,所以在写泛型的时候只能写包装类型不能写基本数据类型Map<String,Integer> map = new HashMap();map.put("a",5);}}

相关文章:

第十三章 集合

一、集合的概念 集合&#xff1a;将若干用途、性质相同或相近的“数据”组合而成的一个整体 Java集合中只能保存引用类型的数据&#xff0c;不能保存基本类型数据 数组的缺点&#xff1a;长度不可变 Java中常用集合&#xff1a; 1.Set(集):集合中的对象不按特定方式排序&a…...

子非线程池中物

线程池&#xff0c;又好上了 有任务队列 任务要处理就直接放到里面 预先创建好线程&#xff0c;本质上也是一个生产消费模型 线程池真是麻烦啊 我们可以直接沿用之前写过的代码&#xff0c;Thread.hpp: #pragma once #include <iostream> #include <functional&…...

Unraid的cache使用btrfs或zfs?

Unraid的cache使用btrfs或zfs&#xff1f; 背景&#xff1a;由于在unraid中添加了多个docker和虚拟机&#xff0c;因此会一直访问硬盘。然而&#xff0c;单个硬盘实在难以让人放心。在阵列盘中&#xff0c;可以通过添加校验盘进行数据保护&#xff0c;在cache中无法使用xfs格式…...

微服务实战——平台属性

平台属性 中间表复杂业务 /*** 获取分类规格参数&#xff08;模糊查询&#xff09;** param params* param catelogId* param type type"base"时查询基础属性&#xff0c;type"sale"时查询销售属性* return*/ Override public PageUtils listByCatelogId…...

半监督学习与数据增强(论文复现)

半监督学习与数据增强&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 半监督学习与数据增强&#xff08;论文复现&#xff09;概述算法原理核心逻辑效果演示使用方式 概述 本文复现论文提出的半监督学习方法&#xff0c;半监督学习&…...

css3-----2D转换、动画

2D 转换&#xff08;transform&#xff09; 转换&#xff08;transform&#xff09;是CSS3中具有颠覆性的特征之一&#xff0c;可以实现元素的位移、旋转、缩放等效果 移动&#xff1a;translate旋转&#xff1a;rotate缩放&#xff1a;scale 二维坐标系 2D 转换之移动 trans…...

SQL进阶技巧:统计各时段观看直播的人数

目录 0 需求描述 1 数据准备 2 问题分析 3 小结 如果觉得本文对你有帮助&#xff0c;那么不妨也可以选择去看看我的博客专栏 &#xff0c;部分内容如下&#xff1a; 数字化建设通关指南 专栏 原价99&#xff0c;现在活动价39.9&#xff0c;十一国庆后将上升至59.9&#…...

Stream流的终结方法

1.Stream流的终结方法 2.forEach 对于forEach方法&#xff0c;用来遍历stream流中的所有数据 package com.njau.d10_my_stream;import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.function.Consumer; import java.util…...

JavaWeb——Vue组件库Element(4/6):案例:基本页面布局(基本框架、页面布局、CSS样式、完善布局、效果展示,含完整代码)

目录 步骤 基本页面布局 基本框架 页面布局 CSS样式 完善布局 效果展示 完整代码 Element 的基本使用方式以及常见的组件已经了解完了&#xff0c;接下来要完成一个案例&#xff0c;通过这个案例让大家知道如何基于 Element 中的各个组件制作一个完整的页面。 案例&am…...

【c++】 模板初阶

泛型编程 写一个交换函数&#xff0c;在学习模板之前&#xff0c;为了匹配不同的参数类型&#xff0c;我们可以利用函数重载来实现。 void Swap(int& a, int& b) {int c a;a b;b c; } void Swap(char& a, char& b) {char c a;a b;b c; } void Swap(dou…...

R 语言 data.table 大规模数据处理利器

前言 最近从一个 python 下的 anndata 中提取一个特殊处理过的单细胞矩阵&#xff0c;想读入R用来画图&#xff08;个人比较喜欢用R可视化 &#xff09;&#xff0c;保存之后&#xff0c;大概几个G的CSV文件&#xff0c;如果常规方法读入R&#xff0c;花费的时间比较久&#x…...

Java 静态代理详解:为什么代理类和被代理类要实现同一个接口?

在 Java 开发中&#xff0c;代理模式是一种常用的设计模式&#xff0c;其中代理类的作用是控制对其他对象的访问。代理模式分为静态代理和动态代理&#xff0c;在静态代理中&#xff0c;代理类和被代理类都需要实现同一个接口。这一机制为实现透明的代理行为提供了基础&#xf…...

OpenCV C++霍夫圆查找

OpenCV 中的霍夫圆检测基于 霍夫变换 (Hough Transform)&#xff0c;它是一种从边缘图像中识别几何形状的算法。霍夫圆检测是专门用于检测图像中的圆形形状的。它通过将图像中的每个像素映射到可能的圆参数空间&#xff0c;来确定哪些像素符合圆形状。 1. 霍夫变换的原理 霍夫…...

H.264编解码介绍

一、简介 H.264,又称为AVC(Advanced Video Coding),是一种广泛使用的视频压缩标准。它由国际电信联盟(ITU)和国际标准化组织(ISO)联合开发,并于2003年发布。 H.264的发展历史可以追溯到上个世纪90年代。当时,视频压缩技术的主要标准是MPEG-2,但它在压缩率和视频质…...

Java | Leetcode Java题解之第450题删除二叉搜索树中的节点

题目&#xff1a; 题解&#xff1a; class Solution {public TreeNode deleteNode(TreeNode root, int key) {TreeNode cur root, curParent null;while (cur ! null && cur.val ! key) {curParent cur;if (cur.val > key) {cur cur.left;} else {cur cur.rig…...

【CViT】Deepfake Video Detection Using Convolutional Vision Transformer

文章目录 Deepfake Video Detection Using Convolutional Vision Transformerkey points**卷积视觉变压器**FLViT实验总结Deepfake Video Detection Using Convolutional Vision Transformer 会议/期刊:2021 作者: key points 提出了一种用于检测深度伪造的卷积视觉变压器…...

安卓主板_MTK4G/5G音视频记录仪整机及方案定制

音视频记录仪方案&#xff0c;采用联发科MT6877平台八核2* A78 6* A55主频高达2.4GHz, 具有高能低耗特性&#xff0c;搭载Android 12.0智能操作系统&#xff0c;可选4GB32GB/6GB128GB内存&#xff0c;运行流畅。主板集成NFC、双摄像头、防抖以及多种无线数据连接&#xff0c;支…...

Qt 教程全集目录公布(方便查阅)

点击上方"蓝字"关注我们 Qt 安装 以下是常见安装方法和软件获取 Qt4Qt5Qt6版本下载(在线和离线)【网址】...

云计算SLA响应时间的matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 用matlab模拟&#xff0c;一个排队理论。输入一堆包&#xff0c;经过buffer&#xff08;一个或者几个都行&#xff09;传给server&#xff0c;这些包会在buffer里…...

ARTS Week 42

Algorithm 本周的算法题为 2283. 判断一个数的数字计数是否等于数位的值 给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#xff0c;都满足数位 i 在 num 中出现了 num[i]次&#xff0c;那么请你返回 true …...

10.2学习

1.IOC控制反转 IoC&#xff08;Inverse of Control:控制反转&#xff09;是⼀种设计思想&#xff0c;就是将原本在程序中⼿动创建对象的控制权&#xff0c;交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤&#xff0c;并⾮ Spring 特有。 ​ IoC 容器是 Spring⽤来实现 IoC …...

【数一线性代数】021入门

Index 推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/141729949分析实现总结 推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/141729949 给定二叉树的根节点root&#xff0c;计算其叶节点的个数。 分析实现 类似…...

(k8s)kubernetes中ConfigMap和Secret

转载&#xff1a;ConfigMap 一、ConfigMap介绍 ConfigMap是一种API对象&#xff0c;用来将非机密性的数据保存到键值对中。使用时&#xff0c;Pod可以将其用作环境变量、命令行参数或存储卷中的配置文件。 ConfigMap将你的环境配置信息和容器镜像解耦&#xff0c;便于应用配置…...

stm32四足机器人(标准库)

项目技术要求 PWM波形的学习 参考文章stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)_ttl pwm 驱动激光头区别-CSDN博客 舵机的学习 参考文章 stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)…...

基于Hive和Hadoop的共享单车分析系统

本项目是一个基于大数据技术的共享单车分析系统&#xff0c;旨在为用户提供全面的单车使用信息和深入的出行行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 S…...

基于SSM和vue的机票订购管理系统

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM和vue的机票订购管理系统2拥有两种角色 管理员&#xff1a;用户管理、机票管理、订票管理、公告管理、广告管理、系统管理、添加机票等 用户&#xff1a;登录注册、订票、查看公…...

【rCore OS 开源操作系统】Rust 练习题题解: Enums

【rCore OS 开源操作系统】Rust 练习题题解: Enums 摘要 rCore OS 开源操作系统训练营学习中的代码练习部分。 在此记录下自己学习过程中的产物&#xff0c;以便于日后更有“收获感”。 后续还会继续完成其他章节的练习题题解。 正文 enums1 题目 // enums1.rs // // No hi…...

VPN简述

文章目录 VPNVPN基础VPN类型 VPN VPN隧道安全 VPN基础 背景&#xff1a; 在网络传输中&#xff0c;绝大部分数据内容都是明文传输&#xff0c;存在很多安全隐患&#xff08;窃听、篡改、冒充&#xff09; 总部、分公司、办事处、出差人员、合作单位等需要访问总部网络资源 Vi…...

【Kubernetes】常见面试题汇总(四十九)

目录 110.假设一家公司希望通过采用新技术来优化其工作负载的分配。公司如何有效地实现这种资源分配&#xff1f; 111.考虑一家拼车公司希望通过同时扩展其平台来增加服务器数量。您认为公司将如何处理服务器及其安装&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【…...

常见排序算法以及冒泡排序的基础使用方法

众所周知&#xff0c;冒泡排序是编程中最经典也是最简单的一种排序方法&#xff0c;它是通过重复访问对两个相邻的值进行比较&#xff0c;由于在互换的过程中&#xff0c;最大 (或最小) 的那个值会慢慢的交换到顶部&#xff0c;像汽水一样&#xff0c;故名“冒泡排序”。 let a…...

wordpress 微博评论插件/网络营销的策划流程

下面是一软件报的一位读者朋友写给‘软件报’编辑的信&#xff1a;。。。。。。。。。。。。。。。。。&#xff08;删&#xff09;感谢软件报杨编辑对我的信任&#xff0c;她委托我就上面这位读者朋友的提问给出一些答复。其实&#xff0c;我本人尽管是一位90年代初的计算机软…...

手机端网站html好看的模板/排名优化哪家好

注册码&#xff1a; {"email": "xiaosongxiaosong.me","product_key": "d419f6-de89e9-0aae59-2acea1-07f92a" } 安装步骤&#xff1a; 然后保存即可。...

嘉兴市城乡规划建设管理委员会网站/百度一下你就知道了百度一下

“十三五”时期&#xff0c;我国太阳能发电产业规模有望得到大幅提升。根据国家能源局提供的规模发展指标&#xff0c;到2020年底&#xff0c;太阳能发电装机容量有望达到1.6亿千瓦&#xff0c;年发电量达到1700亿千瓦时。 据经济参考报6月27日消息&#xff0c;在1.6亿千瓦装机…...

网站关键词排名全掉了/百度提问首页

1.代理一个前端项目 如注释显示 2.代理多个项目 不能配置 /&#xff0c;需要将root 提出来&#xff0c;放在location的外面&#xff0c;root的路径就是项目的共同跟目录。如&#xff1a; 项目1的全路径&#xff1a;/home/XX/project1项目2的全路径&#xff1a;/home/XX/pro…...

自适应型网站建设报价/新闻头条新闻

1、使用git status 命令查看当前状态 上图表示当前位于一个叫做master的分支中 工作目录无需要提交的文件即工作目录中文件没有改动过 2、新建LICENSE文件 输入 git status命令 提示Untracked files (文件未被跟踪)指文件未被添加到暂存区或者git仓库 使用 git add <file>…...

网站域名注册价格/佛山网站优化软件

类加载过程 Class文件需要加载到虚拟机中才能运行&#xff0c;虚拟机加载Class类型文件主要的步骤如下&#xff1a; 加载、验证、准备、初始化这4个过程过程是按照这种顺序按部就班地开始的&#xff0c;而解析阶段不一定&#xff1b;按顺序开始&#xff0c;而不是进行&#…...