【Java数据结构 -- List和ArrayList与顺序表】

List和ArrayList与顺序表

  • 一. List
    • 1.1 List介绍
    • 2.1 常见接口介绍
    • 3.1 List的使用
  • 二. ArrayList与顺序表
    • 1.线性表
    • 2.顺序表
      • 2.1 接口的实现
    • 3.ArrayList简介
    • 4. ArrayList使用
      • 4.1 ArrayList的构造
    • 4.2 ArrayList常见操作
    • 4.3 ArrayList的遍历
    • 4.4 ArrayList的扩容机制
    • 5. ArrayList的具体使用
      • 5.1 简单的洗牌算法
      • 5.2 杨辉三角的实现
    • 6 面试题

一. List

1.1 List介绍

在集合框架中,List是一个接口,继承Collection
Iterable <-- Collection <-- List

Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示:
在这里插入图片描述
Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下:
在这里插入图片描述
站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作

2.1 常见接口介绍

List中提供了很多方法,具体的常用方法如下:
方法 ---- 解释
boolean add(E e) ---- 尾插 e
void add(int index, E element) ---- 将 e 插入到 index 位置
boolean addAll(Collection<? extends E> c) ---- 尾插 c 中的元素
E remove(int index) ---- 删除 index 位置元素
boolean remove(Object o) ---- 删除遇到的第一个 o
E get(int index) ---- 获取下标 index 位置元素
E set(int index, E element) ---- 将下标 index 位置元素设置为 element
void clear() ---- 清空
boolean contains(Object o) ---- 判断 o 是否在线性表中
int indexOf(Object o) ---- 返回第一个 o 所在下标
int lastIndexOf(Object o) ---- 返回最后一个 o 的下标
List subList(int fromIndex, int toIndex) ---- 截取部分 list

3.1 List的使用

List是一个接口,并不是直接用来实例化
如果要使用的话必须先去实例化List的实现类,ArrayLsit和LinkedList都实现了List接口。

二. ArrayList与顺序表

1.线性表

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列等等。

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储
在这里插入图片描述

2.顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

2.1 接口的实现

IList接口:

public interface IList {// 新增元素,默认在数组最后新增public void add(int data);// 在 pos 位置新增元素public void add(int pos, int data);// 判定是否包含某个元素public boolean contains(int toFind);// 查找某个元素对应的位置public int indexOf(int toFind);// 获取 pos 位置的元素public int get(int pos);// 给 pos 位置的元素设为 valuepublic void set(int pos, int value);//删除第一次出现的关键字keypublic void remove(int toRemove);// 获取顺序表长度public int size();// 清空顺序表public void clear();// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的public void display();Boolean isFull();Boolean isEmpty();
}

实现ArrayList方法:

public class MyArrayList implements IList{public int[] elem;public int usedSize;public static final int DEFAULT_CAPACITY = 5;public MyArrayList() {elem = new int[DEFAULT_CAPACITY];}@Overridepublic void display() {for (int i = 0; i < this.usedSize; i++) {System.out.println(elem[i]+" ");}System.out.println();}@Overridepublic void add(int data) {// 判断是否满了 满了就要扩容if (isFull()) {elem = Arrays.copyOf(elem,elem.length*2);}this.elem[usedSize] = data;this.usedSize++;}@Overridepublic Boolean isFull() {return this.usedSize == DEFAULT_CAPACITY;}@Overridepublic void add(int pos, int data) {// pos位置的判断checkPosOfAdd(pos);if (isFull()) {elem = Arrays.copyOf(elem,elem.length*2);}for (int i = this.usedSize-1; i >= pos; i--) {this.elem[i+1] = elem[i];}this.elem[pos] = data;this.usedSize++;System.out.println();}private void checkPosOfAdd(int pos) {if (pos<0 || pos >this.usedSize) {throw new PosException("Pos位置为:"+ pos);}}@Overridepublic boolean contains(int toFind) {for (int i = 0; i < this.usedSize; i++) {if (elem[i] == toFind){return true;}}return false;}@Overridepublic int indexOf(int toFind) {for (int i = 0; i < this.usedSize; i++) {if (elem[i] == toFind) {return i;}}return -1;}// 获取pos位置的值@Overridepublic int get(int pos) {// 判断pos位置checkPosOfGet(pos);// 为空if (isEmpty()) {throw new EmptyException("顺序表为空");//return -1;}return this.elem[pos];}public Boolean isEmpty() {return usedSize ==0;}private void checkPosOfGet(int pos){if (pos < 0 || pos >= this.usedSize) {throw new PosException("Pos位置不合法:"+pos);}}// 更新pos位置的值为value@Overridepublic void set(int pos, int value) {checkPosOfGet(pos);if (isEmpty()) {System.out.println("顺序表为空");}this.elem[pos] = value;}// 删除toRemove这个值@Overridepublic void remove(int toRemove) {if (isEmpty()) {throw new EmptyException("顺序表为空");}int index=indexOf(toRemove);for (int i = index; i < this.usedSize-1; i++) {this.elem[i] = this.elem[i+1];}this.usedSize--;}@Overridepublic int size() {return this.usedSize;}//清空顺序表  防止数据泄露@Overridepublic void clear() {this.usedSize = 0;}
}

注意

  • 在定义了一个空顺序表的时候第一次add分配了默认的内存大小
  • 在扩容的时候是以1.5倍扩容
    Main测试:
public static void main2(String[] args) {
/*        ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(10);arrayList.add(20);arrayList.add(30);arrayList.add(0,99);*///第一次add的时候  分配了内存大小为10//扩容的时候 是1.5倍扩容ArrayList<Integer> arrayList1 = new ArrayList<>();arrayList1.add(10);arrayList1.add(20);arrayList1.add(30);// 传入的参数是E类型或者是E类型的子类ArrayList<Number> arrayList2 = new ArrayList<>(arrayList1);arrayList2.add(9999);System.out.println(arrayList2);//[10, 20, 30, 9999]//list 通过sublist截取后 指向的还是arrayList2所指向的内容 即list和arrayList2指向的内容一致// 所以修改list指向的内容就是 arrayList2的值也会变List<Number> list = arrayList2.subList(0,2);System.out.println(list);//[10, 20]System.out.println("=====");list.set(0,199);System.out.println(arrayList2);  //[199, 20, 30, 9999]System.out.println(list);       //[199, 20]}public static void main1(String[] args) {MyArrayList myArrayList = new MyArrayList();myArrayList.add(1);myArrayList.add(2);myArrayList.add(3);myArrayList.add(4);myArrayList.add(5);myArrayList.add(6);System.out.println(myArrayList.contains(3));System.out.println(myArrayList.indexOf(5));myArrayList.remove(3);myArrayList.display();}

3.ArrayList简介

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:
在这里插入图片描述注意:

  1. ArrayList是以泛型方式实现的,使用时必须要先实例化
  2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
  3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
  4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
  5. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList
  6. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

4. ArrayList使用

4.1 ArrayList的构造

在这里插入图片描述
注意在这里的extends E 传入的是E类型或者是E的子类型

public static void main(String[] args) {// ArrayList创建,推荐写法// 构造一个空的列表List<Integer> list1 = new ArrayList<>();// 构造一个具有10个容量的列表List<Integer> list2 = new ArrayList<>(10);list2.add(1);list2.add(2);list2.add(3);// list2.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素// list3构造好之后,与list中的元素一致ArrayList<Integer> list3 = new ArrayList<>(list2);// 避免省略类型,否则:任意类型的元素都可以存放,使用时将是一场灾难List list4 = new ArrayList();list4.add("111");list4.add(100);
}

4.2 ArrayList常见操作

方法 ------ 解释
boolean add(E e) ------ 尾插 e
void add(int index, E element) ------ 将 e 插入到 index 位置
boolean addAll(Collection<? extends E> c) ------ 尾插 c 中的元素
E remove(int index) ------ 删除 index 位置元素
boolean remove(Object o) ------ 删除遇到的第一个 o
E get(int index) ------ 获取下标 index 位置元素
E set(int index, E element) ------ 将下标 index 位置元素设置为 element
void clear() ------ 清空
boolean contains(Object o) ------ 判断 o 是否在线性表中
int indexOf(Object o) ------ 返回第一个 o 所在下标
int lastIndexOf(Object o) ------ 返回最后一个 o 的下标
List subList(int fromIndex, int toIndex) ------ 截取部分 list

    public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("JavaSE");list.add("JavaWeb");list.add("JavaEE");list.add("JVM");list.add("测试课程");System.out.println(list);// 获取list中有效元素个数System.out.println(list.size());// 获取和设置index位置上的元素,注意index必须介于[0, size)间System.out.println(list.get(1));list.set(1, "JavaWEB");System.out.println(list.get(1));// 在list的index位置插入指定元素,index及后续的元素统一往后搬移一个位置list.add(1, "Java数据结构");System.out.println(list);// 删除指定元素,找到了就删除,该元素之后的元素统一往前搬移一个位置list.remove("JVM");System.out.println(list);// 删除list中index位置上的元素,注意index不要超过list中有效元素个数,否则会抛出下标越界异常list.remove(list.size()-1);System.out.println(list);// 检测list中是否包含指定元素,包含返回true,否则返回falseif(list.contains("测试课程")){list.add("测试课程");}// 查找指定元素第一次出现的位置:indexOf从前往后找,lastIndexOf从后往前找list.add("JavaSE");System.out.println(list.indexOf("JavaSE"));System.out.println(list.lastIndexOf("JavaSE"));// 使用list中[0, 4)之间的元素构成一个新的SubList返回,但是和ArrayList共用一个elementData数组List<String> ret = list.subList(0, 4);System.out.println(ret);list.clear();System.out.println(list.size());}

4.3 ArrayList的遍历

ArrayList 可以使用三方方式遍历:for循环+下标、foreach、使用迭代器

    public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(10);arrayList.add(20);arrayList.add(30);//ArrayList的遍历//第一种遍历方式   重写了toString方法System.out.println(arrayList);//第二种遍历方式for (int i = 0; i < arrayList.size(); i++) {System.out.print(arrayList.get(i)+" ");}System.out.println();//3.for-eachfor (int x:arrayList) {System.out.print(x+" ");}System.out.println();// 4. 迭代器Iterator<Integer> it = arrayList.iterator();while (it.hasNext()) {System.out.print(it.next()+" ");}System.out.println();//5. ListIterator  是 Iterator的子类ListIterator<Integer> it2 = arrayList.listIterator();while (it2.hasNext()) {System.out.print(it2.next()+" ");}System.out.println();//6. 从后往前打印ListIterator<Integer> it3 = arrayList.listIterator();while (it2.hasPrevious()) {System.out.print(it2.previous()+" ");}System.out.println();}

4.4 ArrayList的扩容机制

ArrayList是一个动态类型的顺序表,即:在插入元素的过程中会自动扩容。
ArrayList源码:

Object[] elementData; // 存放元素的空间
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; // 默认空间
private static final int DEFAULT_CAPACITY = 10; // 默认容量大小
public boolean add(E e) {ensureCapacityInternal(size + 1); // Increments modCount!!elementData[size++] = e;return true;
}
private void ensureCapacityInternal(int minCapacity) {ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
private static int calculateCapacity(Object[] elementData, int minCapacity) {if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {return Math.max(DEFAULT_CAPACITY, minCapacity);}return minCapacity;
}
private void ensureExplicitCapacity(int minCapacity) {modCount++;// overflow-conscious codeif (minCapacity - elementData.length > 0)grow(minCapacity);
}
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
private void grow(int minCapacity) {// 获取旧空间大小int oldCapacity = elementData.length;// 预计按照1.5倍方式扩容int newCapacity = oldCapacity + (oldCapacity >> 1);// 如果用户需要扩容大小 超过 原空间1.5倍,按照用户所需大小扩容if (newCapacity - minCapacity < 0)newCapacity = minCapacity;// 如果需要扩容大小超过MAX_ARRAY_SIZE,重新计算容量大小if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// 调用copyOf扩容elementData = Arrays.copyOf(elementData, newCapacity);
}
private static int hugeCapacity(int minCapacity) {// 如果minCapacity小于0,抛出OutOfMemoryError异常if (minCapacity < 0)throw new OutOfMemoryError();return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
}

总结:

  1. 检测是否真正需要扩容,如果是调用grow准备扩容
  2. 预估需要库容的大小初步预估按照1.5倍大小扩容,如果用户所需大小超过预估1.5倍大小,则按照用户所需大小扩容,真正扩容之前检测是否能扩容成功,防止太大导致扩容失败
  3. 使用copyOf进行扩容

5. ArrayList的具体使用

5.1 简单的洗牌算法

Card:

public class Card {public String suit;public int num;public Card(String suit, int num) {this.suit = suit;this.num = num;}@Overridepublic String toString() {/*return "Card{" +"suit='" + suit + '\'' +", num=" + num +'}';*/return suit +""+num;}
}

Cardgame:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Cardgame {public static final String[] suits = {"♥","♣","♦","♠"};// 买牌 (创建牌)public List<Card> buyCard() {List<Card> cardList = new ArrayList<>();for (int i = 0; i < 4; i++) {for (int j = 0; j < 13; j++) {cardList.add(new Card(suits[i],j));//相当于下面代码/*String suit = suits[i];Card card = new Card(suit,j)cardList.add(card);*/}}return cardList;}// 洗牌public void shuffle(List<Card> cardList) {Random random = new Random();for (int i = cardList.size()-1; i > 0; i--) {int index = random.nextInt(i);swap(cardList,i,index);}}private static void swap(List<Card> cardList,int i,int j) {Card tmp = cardList.get(i);cardList.set(i,cardList.get(j));cardList.set(j,tmp);}// 发牌 3个人每个人轮流抓5张牌// 思路:1.每个人拿到牌 放到哪//      2. l轮流怎么抓5张牌public List<List<Card>> getCard(List<Card> cardList) {List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();List<Card> hand3 = new ArrayList<>();List<List<Card>> hand = new ArrayList<>();hand.add(hand1);hand.add(hand2);hand.add(hand3);for (int i = 0; i < 5; i++) {  // 拿五次牌for (int j = 0; j < 3; j++) {  // 3个人//怎么揭牌?  每次相当于 删除下0标这个牌Card card = cardList.remove(0);// 怎么放到对应人的手里面?hand.get(j).add(card);}}return hand;}
}

Main测试:

import java.util.List;public class Main {public static void main(String[] args) {Cardgame cardgame = new Cardgame();List<Card> ret = cardgame.buyCard();System.out.println("买牌:");System.out.println(ret);cardgame.shuffle(ret);System.out.println("洗牌:");System.out.println(ret);System.out.println("揭牌:");List<List<Card>> hand = cardgame.getCard(ret);for (int i = 0; i < hand.size(); i++) {System.out.println("第"+(i+1)+"个人的牌"+hand.get(i));}System.out.println("剩下的牌");System.out.println(ret);}}

在这里插入图片描述

5.2 杨辉三角的实现

具体要求:
在这里插入图片描述

    public List<List<Integer>> generate(int numRows) {// 定义一个二维数组List<List<Integer>> ret = new ArrayList<>();List<Integer> list = new ArrayList<>();list.add(1);ret.add(list);for (int i = 1; i < numRows; i++) {//每循环一次  就是一行List<Integer> curRow = new ArrayList<>();curRow.add(1);  //每行的第一个元素//处理中间的数字List<Integer> preRow = ret.get(i-1);for (int j = 1; j < i; j++) {int x = preRow.get(j)+preRow.get(j-1);curRow.add(x);}//处理最后一个数字curRow.add(1);ret.add(curRow);}return ret;}

6 面试题

CVTE面试题:
str1:“welcome to cvte”
str2: “come”
删除字符串1当中,出现的所有字符串2当中的字符, 即结果为 “wl t vt”

public class Test {public static List<Character> func(String str1,String str2) {List<Character> list = new ArrayList<>();for (int i = 0; i < str1.length(); i++) {char ch = str1.charAt(i);if(!str2.contains(ch+"")) { //contains接收的是字符串  所以字符ch +""list.add(ch);}}return list;}public static void main(String[] args) {List<Character> ret = func("welcome to cvte","come");for (Character ch:ret) {System.out.print(ch);}}
}

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

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

相关文章

芯科科技领先无线技术助力控客赋能智慧亚运村

采用芯科科技MG21无线SoC的控客智能家居解决方案为杭州亚运会媒体村打造智能、舒适、便捷、安全的生活体验 中国&#xff0c;北京 - 2023年12月4日 – 致力于以安全、智能无线连接技术&#xff0c;建立更互联世界的全球领导厂商Silicon Labs&#xff08;亦称“芯科科技”&…

名创优品出海更难了,Q3净利增速放缓

近日&#xff0c;有媒体报道称&#xff0c;名创优品受市场流传针对公司的做空报告&#xff0c;叠加高管团队两次减持&#xff0c;共计180万股&#xff0c;若对应25美元的价格&#xff0c;则达4500万美元(约3.2亿元)。 12月5日&#xff0c;其港股收盘股价下跌14.04%&#xff1b…

Javascript 函数介绍

Javascript 函数介绍 很多教程书一上来就讲解一堆语法&#xff0c;例如函数定义、函数调用什么。等读者看完了函数这一章都没搞懂什么是函数。 在讲解什么叫函数之前&#xff0c;我们先看下面一段代码&#xff1a; <!DOCTYPE html> <html xmlns"http://www.w3.…

文心一言 VS 讯飞星火 VS chatgpt (152)-- 算法导论12.2 8题

八、用go语言&#xff0c;证明&#xff1a;在一棵高度为 h 的二叉搜索树中&#xff0c;不论从哪个结点开始&#xff0c;k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(kh)。 文心一言&#xff1a; 要证明在一棵高度为 h 的二叉搜索树中&#xff0c;不论从哪个结点开始&#xf…

VSCODE 运行C程序缓慢解决方法之一

最近更换了mingw的版本&#xff0c;安装路径与之前的mingw路径不大一样。结果发现代码运行的时候很慢&#xff0c;弹出窗口后&#xff0c;迟迟没有打印任何东西&#xff0c;就像卡死了一样。试过网上说的一堆方法&#xff0c;没有什么用。 我按照以下流程进行检查: 1.检查min…

地震反演基础知识3

文章目录 地震勘探原理1 地震波1. 1 地震波概念1. 2 波的传播1. 2. 1 波传播的基本原理1. 2. 2 地震波的反射,折射,透射的1. 2. 3 地震子波&#xff08;seismic wavelet&#xff09;1. 2. 4 地震合成记录 2 地震时距曲线2.1 地震时距曲线作用2.2 不同波的时距曲线2.2.1 直达波时…

【Jeecg Boot 3 - 保姆级】第1节 docker + redis + nginx + redis一键安装启动

一、前言 ▶ JEECG-BOOT 开源版难以吃透的原因 ▶ 为了针对上面痛点&#xff0c;笔者做了如下安排 ▶ 你能收获什么 二、效果(第一节效果) ▶ 启动后端 &#xff1e; 日志 &#xff1e; 接口文档 ▶ 启动前端 三、准备工作 四、实战 ▶ 1、服务器安装 Stag…

2024年甘肃省职业院校技能大赛信息安全管理与评估赛项二三阶段样题一

2024年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项样题一 第二阶段 任务书 任务描述 随着网络和信息化水平的不断发展&#xff0c;网络安全事件也层出不穷&#xff0c;网络恶意代码传播、信息窃取、信息篡改、远程控制等各种网络攻击 行为已严重…

3D渲染和动画制作软件KeyShot Pro mac附加功能

KeyShot 11 mac是一款专业化实时3D渲染工具&#xff0c;使用它可以简化3d渲染和动画制作流程&#xff0c;并且提供最准确的材质及光线&#xff0c;渲染效果更加真实&#xff0c;KeyShot为您提供了使用 CPU 或 NVIDIA GPU 进行渲染的能力和选择&#xff0c;并能够线性扩展以获得…

Linux 多进程并发设计-进程对核的亲缘设置

1设计结构 2 设计优点 1 充分利用多核系统的并发处理能力2 负载均衡3 职责明确&#xff0c;管理进程仅负责管理&#xff0c;工作进程仅负责处理业务逻辑 3 演示代码: //main.cpp #define _GNU_SOURCE #include<sys/types.h> #include<sys/wait.h> #include <…

新生儿出生缺陷筛查的关键注意事项

引言&#xff1a; 新生儿的出生缺陷是一个复杂而广泛的问题&#xff0c;及早的筛查和诊断对于预防和管理这些缺陷至关重要。出生缺陷可能涉及各个系统&#xff0c;包括心脏、神经、遗传等&#xff0c;因此及时而全面的筛查对新生儿的健康至关重要。本文将深入探讨新生儿出生缺…

LocalDateTime加一年取有效期23:59:59

&#x1f60a; 作者&#xff1a; 瓶盖子io &#x1f496; 主页&#xff1a; 瓶盖子io-CSDN博客 打印控制台: 2023-12-08T11:59:13.739 当前系统时间

【数电笔记】53-与非门构成的基本RS触发器

目录 说明&#xff1a; 1. 电路组成 2. 逻辑功能 3. 特性表 4. 特性方程 5. 状态转换图 6. 驱动表 7. 例题 例1 例2 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并未记录所有章节&#xff0c;只对个人认为重要章节做了笔记&#xff1b…

护眼灯有效果吗?考研必备护眼台灯推荐

据统计&#xff0c;中国人口的近视率约为10%至20%。 国家卫健委发布的中国首份眼健康白皮书显示&#xff0c;我国小学生近视率为47.2%&#xff0c;初中生近视率为75.8%&#xff0c;大学生近视率超过90%。据世界卫生组织统计数据显示&#xff0c;目前全球约有14亿近视人口&#…

QT作业1

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 头文件代码&#xff1a; #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> #include <QLabel> //标签类 #include <QMovie> //动图类 #include <…

系列学习前端之第 4 章:一文精通 JavaScript

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料&#xff1a; 链接: 百度网盘 请输入提取码 提取码: 6666 1、JavaScript 格式 一般放在 html 的 <head> 标签中。type&#xff1a;默认值text/javascript可以不写&#xff0c;不写也是这个值。 <script typ…

mybatis数据输出-单个简单类型和返回实体类型对象以及别名设置

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

家电制造数字孪生5G智能工厂可视化系统,加速家电制造产业数字化转型

5G数字孪生、三维可视化与工业互联网的融合加速中国新型工业化进程&#xff0c;助推我国从制造大国迈进制造强国。家电行业是中国最具国际竞争力的产业之一&#xff0c;在企业数字化转型中&#xff0c;要求企业从生产设备到数字化系统&#xff0c;一系列的数字化、智能化改革已…

uniapp实战 —— 骨架屏

1. 自动生成骨架屏代码 在微信开发者工具中&#xff0c;预览界面点击生成骨架屏 确定后&#xff0c;会自动打开骨架屏代码文件 pages\index\index.skeleton.wxml 2. 将骨架屏代码转换为vue文件 在项目中新建文件 src\pages\index\components\skeleton.vue 将pages\index\index…

【C/PTA —— 15.结构体2(课外实践)】

C/PTA —— 15.结构体2&#xff08;课外实践&#xff09; 7-1 一帮一7-2 考试座位号7-3 新键表输出7-4 可怕的素质7-5 找出同龄者7-6 排队7-7 军训 7-1 一帮一 #include<stdio.h> #include<string.h>struct student {int a;char name[20]; };struct student1 {int …