Java-泛型实验

news2024/7/6 17:54:56

1.定义一个学生类Student,具有年龄age和姓名name两个属性,并通过实现Comparable接口提供比较规则(返回两个学生的年龄差), 定义测试类Test,在测试类中定义测试方法Comparable getMax(Comparable c1, Comparable c2)完成测试

Student

public class Student implements Comparable<Student> {

	private String name;
	private int age;

	public Student() {
		super();
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}

	@Override
	public int compareTo(Student s) {
		Student student = (Student) s;

		return this.getAge() - student.getAge();
	}

}

StudentTest

public class StudentTest {

	public static void main(String[] args) {
		Student s1 = new Student("张三", 18);

		Student s2 = new Student("李四", 30);

		if (getMax(s1, s2) < 0) {
			System.out.println("年龄大的是->" + s2);
		} else {
			System.out.println("年龄大的是->" + s1);
		}
	}

	public static int getMax(Comparable<Student> c1, Comparable<Student> c2) {
		return c1.compareTo((Student) c2);
	}

}

在这里插入图片描述

2.模拟ArrayList集合自定义一个集合类MyArrayList,完成添加和删除功能的泛型设计,定义测试类完成测试

MyArrayList

public class MyArrayList<E> {

	// 默认大小
	private static final int DEFAULT_CAPACITY = 10;
	// 找不到值为-1
	public static final int ELEMENT_NOT_FOUND = -1;
	// 集合大小
	private int size;
	// 存放元素的数组
	private E[] elements;

	// 构造方法
	public MyArrayList() {
		clear();
	}

	/**
	 * 
	 * @Title: clear
	 * @Description: 清空集合
	 * @param:
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public void clear() {
		size = 0;
		ensureCapacity(DEFAULT_CAPACITY);
	}

	/**
	 * 
	 * @Title: ensureCapacity
	 * @Description: 开辟一个新的数组,扩容操作
	 * @param: @param newCapacity
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	@SuppressWarnings("unchecked")
	public void ensureCapacity(int newCapacity) {
		if (newCapacity < size) {
			return;
		}
		E[] oldElements = elements;
		// 新建一个数组
		elements = (E[]) new Object[newCapacity];
		for (int i = 0; i < size; i++) {
			elements[i] = oldElements[i];
		}
	}

	/**
	 * 
	 * @Title: size
	 * @Description: 返回集合大小
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public int size() {
		return size;
	}

	/**
	 * 
	 * @Title: isEmpty
	 * @Description: 返回集合是否为空
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public boolean isEmpty() {
		return size() == 0;
	}

	/**
	 * 
	 * @Title: trimToSize
	 * @Description: 修改指定大小
	 * @param:
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public void trimToSize() {
		ensureCapacity(size());
	}

	/**
	 * 
	 * @Title: get
	 * @Description: 获取指定索引的元素
	 * @param: @param  index
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public E get(int index) {
		rangeCheck(index);
		return elements[index];
	}

	/**
	 * 
	 * @Title: indexOf
	 * @Description: 查看元素的索引
	 * @param: @param  element
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public int indexOf(E element) {
		if (element == null) {
			for (int i = 0; i < size; i++) {
				if (elements[i] == null)
					return i;
			}
		} else {
			for (int i = 0; i < size; i++) {
				if (element.equals(elements[i]))
					return i;
			}
		}
		return ELEMENT_NOT_FOUND;
	}

	/**
	 * 
	 * @Title: contains
	 * @Description: 是否包含指定元素
	 * @param: @param  element
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public boolean contains(E element) {
		return indexOf(element) != ELEMENT_NOT_FOUND;
	}

	/**
	 * 
	 * @Title: set
	 * @Description: 修改指定索引的值
	 * @param: @param  index
	 * @param: @param  newElement
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public E set(int index, E newElement) {
		rangeCheck(index);
		E old = elements[index];
		elements[index] = newElement;
		return old;
	}

	/**
	 * 
	 * @Title: add
	 * @Description: 直接从尾部插入
	 * @param: @param  addElement 添加的元素
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public boolean add(E addElement) {
		add(size(), addElement);
		return true;
	}

	/**
	 * 
	 * @Title: add
	 * @Description: 指定索引位置添加元素
	 * @param: @param index 索引
	 * @param: @param addElement 添加的元素
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public void add(int index, E addElement) {
		// 先判断是否需要扩容
		if (elements.length == size()) {
			ensureCapacity(size() * 2 + 1);
		}
		// 集合元素往后移动
		for (int i = size; i > index; i--) {
			elements[i] = elements[i - 1];
		}
		elements[index] = addElement;
		size++;
	}

	/**
	 * 
	 * @Title: remove
	 * @Description: 删除指定索引的元素
	 * @param: @param  index
	 * @param: @return
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public E remove(int index) {
		E removeElement = elements[index];
		// 集合的元素统一向前移动
		for (int i = index; i < size() - 1; i++) {
			elements[i] = elements[i + 1];
		}
		// 长度减1
		size--;

		return removeElement;
	}

	/**
	 * 
	 * @Title: rangeCheck
	 * @Description: 判断索引是否合法
	 * @param: @param index
	 * @author: KangXiaoZhuang
	 * @email: ITkxz0830@163.com
	 */
	public void rangeCheck(int index) {
		if (index < 0 || index >= size()) {
			throw new ArrayIndexOutOfBoundsException("索引越界异常!!!");
		}
	}

	public void print() {
		for (int i = 0; i < size; i++) {
			System.out.print(elements[i] + " ");
		}
		System.out.println();
	}
}

MyArrayListTest

public class MyArrayListTest {
	public static void main(String[] args) {
		MyArrayList<Integer> list = new MyArrayList<>();
		list.add(getRandom());
		list.add(getRandom());
		list.add(getRandom());
		list.add(getRandom());
		list.add(getRandom());
		list.print();

		System.out.println("==========删除操作==========");
		list.remove(2);
		list.print();
	}

	public static int getRandom() {
		Random random = new Random();
		return random.nextInt(10);
	}
}

在这里插入图片描述

3.定义一个泛型方法printArray,可以打印输出任何类型的数组,例如:[“小明”,”小红”,”小兰”],[1,2,3] ,定义测试类完成测试。

public class PrintArray {
	public static void main(String[] args) {
		Integer[] intArray = { 1, 2, 3, 4, 5 };
		Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
		Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
		String[] stringArray = { "小明", "小红", "小兰" };
		System.out.println("整型数组元素为:");
		printArray(intArray);
		System.out.println("\n双精度型数组元素为:");
		printArray(doubleArray);
		System.out.println("\n字符型数组元素为:");
		printArray(charArray);
		System.out.println("\n字符串数组元素为:");
		printArray(stringArray);
	}

	public static <T> void printArray(T[] array) {
		System.out.println(Arrays.toString(array));
	}
}

在这里插入图片描述

4.为某系统提供一个泛型接口Data,该接口可以约束非泛型类TeacherData和StudentData必须完成数据(学生、老师)的增删改查操作

Data

public interface Data<T> {

	void add(T t);

	void remove(T t);

	void update(int index, T t);

	T query(int index);
}

Student

public class Student {
	private int id;
	private String name;

	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public Student() {
		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}

}

StudentData

public class StudentData implements Data<Student> {

	ArrayList<Student> studentList = new ArrayList<>();

	@Override
	public void add(Student s) {
		studentList.add(s);
	}

	@Override
	public void remove(Student s) {
		studentList.remove(s);
	}

	@Override
	public void update(int index, Student s) {
		for (int i = 0; i < studentList.size(); i++) {
			if (s == studentList.get(i)) {
				index = i;
				break;
			}
		}
		studentList.set(index, s);
	}

	@Override
	public Student query(int index) {
		return studentList.get(index);
	}

	public ArrayList<Student> getArrayList() {
		return this.studentList;
	}
}

TeacherData

public class TeacherData implements Data<Teacher> {

	ArrayList<Teacher> teacherList = new ArrayList<>();

	@Override
	public void add(Teacher t) {
		teacherList.add(t);
	}

	@Override
	public void remove(Teacher t) {
		teacherList.remove(t);
	}

	@Override
	public void update(int index, Teacher t) {
		for (int i = 0; i < teacherList.size(); i++) {
			if (t == teacherList.get(i)) {
				index = i;
				break;
			}
		}
		teacherList.set(index, t);
	}

	@Override
	public Teacher query(int index) {
		return teacherList.get(index);
	}

	public ArrayList<Teacher> getArrayList() {
		return this.teacherList;
	}
}

DataTest

public class DataTest {

	public static void main(String[] args) {
		DataTest dataTest = new DataTest();
		dataTest.testStudent();
		System.out.println("===========================================");
		dataTest.testTeacher();
	}

	public void testStudent() {
		Teacher t1 = new Teacher(13, "小红");
		Teacher t2 = new Teacher(4, "小明");
		Teacher t3 = new Teacher(68, "小花");
		Teacher t4 = new Teacher(98, "小庄");
		Teacher t5 = new Teacher(24, "小康");
		TeacherData teacherData = new TeacherData();
		System.out.println("添加元素");
		teacherData.add(t1);
		teacherData.add(t2);
		teacherData.add(t3);
		teacherData.add(t4);
		teacherData.add(t5);
		System.out.println(teacherData.getArrayList());
		teacherData.remove(t1);
		System.out.println("\n删除元素");
		System.out.println(teacherData.getArrayList());
		System.out.println("\n更新元素");
		teacherData.update(2, new Teacher(66, "康小庄"));
		System.out.println(teacherData.getArrayList());
		System.out.println("\n查询元素");
		System.out.println(teacherData.query(3));
	}

	public void testTeacher() {
		Teacher t1 = new Teacher(1, "张三");
		Teacher t2 = new Teacher(2, "李四");
		Teacher t3 = new Teacher(3, "王五");
		Teacher t4 = new Teacher(4, "赵六");
		Teacher t5 = new Teacher(5, "田七");
		TeacherData teacherData = new TeacherData();
		System.out.println("添加元素");
		teacherData.add(t1);
		teacherData.add(t2);
		teacherData.add(t3);
		teacherData.add(t4);
		teacherData.add(t5);
		System.out.println(teacherData.getArrayList());
		teacherData.remove(t1);
		System.out.println("\n删除元素");
		System.out.println(teacherData.getArrayList());
		System.out.println("\n更新元素");
		teacherData.update(0, new Teacher(8, "新教师"));
		System.out.println(teacherData.getArrayList());
		System.out.println("\n查询元素");
		System.out.println(teacherData.query(1));
	}
}

在这里插入图片描述

5.顺序表是线性表的顺序存储,是在计算机内存中以数组的形式保存的线性表,请完善顺序表的数据结构,顺序表的泛型类设计如下。

类名 SequenceList
构造方法 SequenceList(int capacity) 创建容量为capacity的SequenceList对象
成员方法
1.public void clear() 置空顺序表
2.public boolean isEmpty() 判断顺序表是否为空
3.public int length() 获取顺序表的元素个数
4.public T get(int i) 返回顺序表中的第i个元素
5.public void insert(int i,T t) 在顺序表的第i个元素之前插入一个元素t
6.public void insert(T t) 向顺序表中添加一个元素t
7.public T remove(int i) 删除并返回顺序表中的第i个元素
8.public int indexOf(T t) 返回顺序表中首次出现元素t的位置,若不存在返回-1
成员变量
1.private T[] eles 存储元素的数组
2.private int n 当前顺序表的长度

6.顺序表的遍历:
(1)让SequenceList实现Iterable接口,重写iterator方法;
(2)在SequenceList类内部提供一个内部类 SIterator,实现Iterable接口,重写hasNext方法和next方法。
(3)编写测试类,测试SequenceList类支持的foreach循环。

SequenceList

@SuppressWarnings("all")
public class SequenceList<T> implements Iterable<T> {
	// 存储元素的数组
	private T[] eles;
	// 当前顺序表的长度
	private int n;

	// 创建容量为capacity的SequenceList对象
	SequenceList(int capacity) {
		eles = (T[]) new Object[capacity];
	}

	// 置空顺序表
	public void clear() {
		for (int i = 0; i < n; i++) {
			eles[i] = null;
		}
		n = 0;
	}

	// 判断顺序表是否为空
	public boolean isEmpty() {
		return n == 0;
	}

	// 获取顺序表的元素个数
	public int length() {
		int count = 0;
		for (int i = 0; i < n; i++) {
			if (eles[i] != null) {
				count++;
			}
		}
		return count;
	}

	// 返回顺序表中的第i个元素
	public T get(int i) {
		return eles[i];
	}

	// 在顺序表的第i个元素之前插入一个元素t
	public void insert(int i, T t) {
		for (int j = n - 1; j >= i; j--) {
			eles[j + 1] = eles[j];
		}
		eles[i] = t;
		n++;
	}

	// 向顺序表中添加一个元素t
	public void insert(T t) {
		insert(n, t);
	}

	// 删除并返回顺序表中的第i个元素
	public T remove(int i) {
		T oldelement = eles[i];
		for (int j = i + 1; j < n; j++) {
			eles[j - 1] = eles[j];
		}
		eles[--n] = null;
		return oldelement;
	}

	// 返回顺序表中首次出现元素t的位置,若不存在返回-1
	public int indexOf(T t) {
		if (eles == null) {
			for (int i = 0; i < n; i++) {
				if (eles[i] == null) {
					return i;
				}
			}
		} else {
			for (int i = 0; i < n; i++) {
				if (eles.equals(eles[i])) {
					return i;
				}
			}
		}
		return -1;
	}

	public void print() {
		for (T t : eles) {
			if (t != null) {
				System.out.print(t + ",");
			}
		}
	}

	@Override
	public Iterator<T> iterator() {
		return new SIterator<T>(this);
	}

	class SIterator<T> implements Iterator<T> {

		private int current = 0;

		private SequenceList<T> sequenceList;

		public SIterator(SequenceList<T> sequenceList) {
			this.sequenceList = sequenceList;
		}

		@Override
		public boolean hasNext() {
			// 判断是否还有下一个
			return current < sequenceList.length();
		}

		@Override
		public T next() {
			// 看是否还有下一个
			if (!hasNext()) {
				throw new NoSuchElementException();
			}
			return sequenceList.eles[current++];
		}

		public void remove() {
			SequenceList.this.remove(--current);
		}
	}
}

SequenceListTest

public class SequenceListTest {
	public static void main(String[] args) {
		test01();
	}

	public static void test01() {
		SequenceList<Integer> sequenceList = new SequenceList<Integer>(10);
		System.out.println("添加元素");
		for (int i = 0; i < 10; i++) {
			sequenceList.insert(i);
		}
		sequenceList.print();
		System.out.println();
		System.out.println("清空集合");
		sequenceList.clear();
		System.out.println("集合大小:" + sequenceList.length());
		System.out.println("添加元素");
		for (int i = 10; i < 20; i++) {
			sequenceList.insert(i);
		}
		sequenceList.print();
		System.out.println();
		System.out.println("集合大小:" + sequenceList.length());
		System.out.println("集合是否为空:" + sequenceList.isEmpty());
		System.out.println("索引5的元素是:" + sequenceList.get(5));
		System.out.println("删除索引5的元素:" + sequenceList.remove(5));
		sequenceList.print();
		System.out.println();

		System.out.println("迭代器遍历");
		// 迭代器遍历
		Iterator<Integer> iterator = sequenceList.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}

在这里插入图片描述

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

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

相关文章

基于springboot农机电招平台设计与实现的源码+文档

摘要 随着农机电招行业的不断发展&#xff0c;农机电招在现实生活中的使用和普及&#xff0c;农机电招行业成为近年内出现的一个新行业&#xff0c;并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;变高…

Kubernetes资源调度之节点亲和

Kubernetes资源调度之节点亲和 Pod节点选择器 nodeSelector指定的标签选择器过滤符合条件的节点作为可用目标节点&#xff0c;最终选择则基于打分机制完成。因此&#xff0c;后者也称为节点选择器。用户事先为特定部分的Node资源对象设定好标签&#xff0c;而后即可配置Pod通过…

YOLO X 改进详解

YOLO X 主要改进&#xff1a; Anchor-Free: FCOSDecoupled detection headAdvanced label assigning strategy Network structure improvement Decoupled detection head 对比于YOLO V5, YOLO X 在detection head上有了改进。YOLO V5中&#xff0c;检测头是通过卷积同时预…

ROS2--概述

ROS2概述1 ROS2对比ROS12 ROS2 通信3 核心概念4 ros2 安装5 话题、服务、动作6 参数参考1 ROS2对比ROS1 多机器人系统&#xff1a;未来机器人一定不会是独立的个体&#xff0c;机器人和机器人之间也需要通信和协作&#xff0c;ROS2为多机器人系统的应用提供了标准方法和通信机…

时间序列:时间序列模型---自回归过程(AutoRegressive Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 这次我们构造一个由无限的白噪声实现&#xff08;white noise realization) 组成的时间序列&#xff0c;即。这个由无限数目的项组成的值却是一个有限的值&#xff0c;比如时刻的值为&#xff0c; 而…

基于PHP+MySQL校园餐饮配送系统的设计与实现

随着我国国民经济的稳步发展,我国的大学生也越来越多,但是大部分学生都是没有时间和环境去自己做饭的,有很多也不会做,而很多食堂的菜品有难以下咽,所以很多人就采取了订餐的方式来进行购买美食,但是现在很多网站都是只能进行点餐,而没有智能推荐功能,本系统在原来的外卖基础上…

【Linux】文件系统

目录&#x1f308;前言&#x1f337;1、磁盘的组成&#x1f361;1.1、磁盘的物理结构&#x1f362;1.2、磁盘的存储结构&#x1f363;1.3、磁盘的逻辑结构&#x1f338;2、文件系统&#x1f364;2.1、文件系统的结构&#x1f365;2.2、inode如何与数据块建立联系&#x1f366;2…

2021年全国研究生数学建模竞赛华为杯C题帕金森病的脑深部电刺激治疗建模研究求解全过程文档及程序

2021年全国研究生数学建模竞赛华为杯 C题 帕金森病的脑深部电刺激治疗建模研究 原题再现&#xff1a; 一、背景介绍   帕金森病是一种常见的神经退行性疾病&#xff0c;临床表现的特征是静止性震颤&#xff0c;肌强直&#xff0c;运动迟缓&#xff0c;姿势步态障碍等运动症…

R语言生存分析可视化分析

生存分析指的是一系列用来探究所感兴趣的事件的发生的时间的统计方法。 生存分析被用于各种领域&#xff0c;例如&#xff1a; 癌症研究为患者生存时间分析&#xff0c; “事件历史分析”的社会学 在工程的“故障时间分析”。 在癌症研究中&#xff0c;典型的研究问题如下…

Java中如何处理时间--Date类

文章目录0 写在前面1 介绍Date类2 构造方法举例2.1 Date()2.2 Date(long date)3 Date类中常用方法4 写在最后0 写在前面 在实际业务中&#xff0c;总会碰到关于时间的问题&#xff0c;例如收集当年的第一季度的数据。第一季度也就是当年的一月一日到三月三十一日。如何处理时间…

使用markdown画流程图、时序图等

概述 能表示的图类型还有很多&#xff0c;比如&#xff1a; sequenceDiagram时序图 classDiagram类图 stateDiagram:状态图 erDiagram&#xff1a;ER图 gantt&#xff1a; 甘特图 pie&#xff1a;饼图 requirementDiagram: 需求图 流程图 流程图代码以「graph 《布局…

【毕业设计】12-基于单片机的电子体温计(原理图工程+源码工程+仿真工程+答辩论文)

【毕业设计】12-基于单片机的电子体温计&#xff08;原理图工程源码工程仿真工程答辩论文&#xff09; 文章目录【毕业设计】12-基于单片机的电子体温计&#xff08;原理图工程源码工程仿真工程答辩论文&#xff09;任务书设计说明书摘要设计框架架构设计说明书及设计文件源码展…

Efficient Large-Scale Language Model Training on GPU ClustersUsing Megatron-LM

Efficient Large-Scale Language Model Training on GPU ClustersUsing Megatron-LM 1 INTRODUCTION 在这篇文章中展示了 如何将 tensor &#xff0c;pipeline&#xff0c; data 并行组合&#xff0c;扩展到数千个GPU上。 提出了一个新的交错流水线调度&#xff0c;可以提升1…

卷积神经网络的工程技巧总结

参考 卷积神经网络的工程技巧(tricks) - 云社区 - 腾讯云 要成功地使用深度学习算法&#xff0c;仅仅知道存在哪些算法和解释它们为何有效的原理是不够的。一个优秀的机器学习实践者还需知道如何针对具体应用挑选一个合适的算法以及如何监控&#xff0c;并根据实验反馈改进机器…

基于 Hive 的 Flutter 文档类型存储

基于 Hive 的 Flutter 文档类型存储 原文 https://medium.com/gytworkz/document-type-storage-in-flutter-using-hive-a18ea9659d84 前言 长久以来&#xff0c;我们一直使用共享首选项以键对格式在本地存储中存储数据&#xff0c;或者使用 SQLite 在 SQL 数据库中存储数据。 存…

JSP | JSP原理深度剖析、基础语法

目录 一&#xff1a;分析使用纯粹Servlet开发web应用的缺陷 二&#xff1a;JSP原理深度剖析 三&#xff1a;JSP的基础语法 一&#xff1a;分析使用纯粹Servlet开发web应用的缺陷 &#xff08;1&#xff09;在Servlet当中编写HTML/CSS/JavaScript等前端代码存在什么问题&…

基于ATX自动化测试解决方案

在整车开发中&#xff0c;诊断功能实现后需要进行测试验证。测试验证主要分为两个方面&#xff1a;诊断协议层测试和诊断功能测试。诊断协议层测试&#xff1a;需要对服务层服务定义、传输层相关时间参数进行测试验证&#xff1b;诊断功能测试&#xff1a;需要对各诊断功能项&a…

国产操作系统之银河麒麟服务器版V10安装

一、银河麒麟操作系统简介 银河麒麟是目前国内国产化操作系统主流产品之一。银河麒麟高级服务器操作系统V10是针对企业级关键业务&#xff0c;适应虚拟化、云计算、大数据、工业互联网时代对主机系统可靠性、安全性、性能、扩展性和实时性等需求&#xff0c;依据CMMI5级标准研制…