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

数据结构(Java版)第五期:ArrayList与顺序表(下)

目录

一、用数组实现顺序表


一、用数组实现顺序表

     我们提到过,顺序表是基于数组的封装,这次我们以int为例,用数组去实现一个顺序表。

public class MyArrayList {private int[] arr;public MyArrayList(int capacity){//指定初始容量arr = new int[capacity];//这个顺序表依然是空的,还得使用add往里面添加有效元素}
}

      既然存在有效与无效,那我们该如何区分呢?我们可以定义一个size变量。

private int size;//规定前size个元素为有效元素

下面就是进行写出方法,比如增、删、查、改等。

    //获取元素个数public int size(){return size;}//新增元素,尾插public void add(int val){}//任意位置新增元素public void add(int index,int val){}//根据下标获取元素public void get(int index){}//根据下标设置元素public void set(int index,int val){}//根据数组的值删除元素public void delete(int val){}//根据下标删除元素public int remove(int index,int val){}//判断元素是否存在public boolean contains(int val){}//查找元素所在位置public int indexOf(int index){}//删除所有元素public void clear(){}//打印操作,把ArrayList转成字符串@Overridepublic String toString() {}

       这里是一些主要的方法,如果我们想实现其他方法,也可以再新增。我们对方法进行了命名之后,下面就是进行实现。我们先来看新增元素的实现。我们需要把新增的元素放到最后的位置,下标为size。如果说size比arr.length的值要小,那么我们正常添加就可以,可如果我们size的值比arr.length要小,我们要先进行扩容。我们可以再写一个resize方法来扩容。

    //新增元素,尾插public void add(int val){if(size == arr.length){resize();}arr[size] = val;size++;}private void resize(){//这个方法只有程序员才能调用//创建一个更长的数组,长度扩大到原来的1.5倍//这样就能保证我们每添加一个元素,长度够用int[] newArr = new int[(int)(arr.length * 1.5)];for (int i = 0; i < size; i++) {//原来数组的元素复制到新数组中newArr[i] = arr[i];//新数组代替旧数组,旧的数组会被垃圾回收给释放掉arr = newArr;}}

      我们还要实现toString方法,方便我们后期打印这个顺序表。

    @Overridepublic String toString() {// 打印的格式形如: [1, 2, 3, 4]StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("[");for (int i = 0; i < size; i++) {stringBuilder.append(arr[i]);if (i < size - 1) {stringBuilder.append(", ");}}stringBuilder.append("]");return stringBuilder.toString();}

下面我们来进行一下测试,

    public static void test(){MyArrayList list = new MyArrayList(6);list.add(1);list.add(2);list.add(3);list.add(4);System.out.println(list.size);System.out.println(list);}public static void main(String[] args) {test();}

 下面是调试结果

运行结果 

       下面我们进行对新增元素的实现,当我们插入一个新元素时,这个新元素之后的所有元素都要后移一个位置。那么此时我们的时间复杂度就是O(N)

 public void add(int index, int val) {if (index < 0 || index > size) {throw new IndexOutOfBoundsException("Index out of bounds");}// 如果数组已经满了, 继续添加元素, 也是要先扩容if (size == arr.length) {resize();}// 搬运元素的操作. 从后往前, 依次把每个元素都往后搬运一个位置.// 如果元素本身的下标是 i, 就把这个元素赋值到 i+1 的位置上.// index 位置的元素也需要往后搬运一下, i >= indexfor (int i = size - 1; i >= index; i--) {arr[i + 1] = arr[i];}// 此时就相当于把 index 位置已经腾出来了. 把新元素放到 index 位置上就好了.arr[index] = val;// 不要忘记更新 sizesize++;}

        有的老铁可能觉得这个方法有点麻烦,如果说我们直接插入的新元素,这个位置的旧元素直接后移到我们顺序表中的最后一个位置行不行,并且此时的时间复杂度就是O(N)。其实呢,对于我们的顺序表和链表这样的结构来说,它们都是“有序的”,如果我们把原有的顺序改变了,就不是原来的结构了。

//根据下标获取元素
public int get(int index){if(index<0 || index>arr.length){throw new IndexOutOfBoundsException("下标越界"+index);}return arr[index];}

       数组通过[]访问下标,时间复杂度是O(1)。Java的数组呢,本质是来源于C/C++,C/C++中数组访问下标时间复杂度同样也是O(1)。我们知道数组是一块连续存放的内存空间,通过过数组首元素和下标快速算出来对应元素的地址,根据这个地址来访问这个内存空间。内存的硬件设备具备一个特性,随机访问能力。

       对于删除元素,也是要保证顺序表在有序的前提下,对于尾删的情况,直接进行size--就可以了,不必进行搬运。 但如果说,我们删除中间的某一个元素,当index==size时,尾插是可以的,但index>size的时候,就会出现异常。

        if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("下标越界: " + index);}
    //根据下标删除元素public int remove(int index,int val){if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("下标越界: " + index);}//要删除的元素先保存起来,就不怕后期搬运的时候被覆盖int result = arr[index];if (index == size-1){//尾删size--;return result;}//一定要注意边界值,可以代入具体数字进行验证for (int i = index; i < size-1; i++) {arr[i] = arr[i+1];//进行向后搬运}}

       仔细分析上面的代码时就会发现,当index为尾删的时候,for循环是进不去的,接下来进行的就是size--的操作。

    public static void test2(){MyArrayList list = new MyArrayList(10);list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);list.remove(0);System.out.println(list);list.remove(2);System.out.println(list);list.remove(4);System.out.println(list);list.remove(100);System.out.println(list);}

对于delete方法,我们需要先找到这个值所在的位置,找到之后,调用remove方法执行。

        for (int i = 0; i < size; i++) {if(arr[i] == val){//找到了break;}}

       这个for循环结束的条件有两个,i==size或者是arr[i]==val时,但由于我们这个i是for循环里面的局部变量,我们可以把i改成index,并作用再for循环之外。

    //根据数组的值删除元素public void delete(int val){int index = 0;for (; index < size; index++) {if(arr[index] == val){//找到了break;}}for (int i = index; i < size-1; i++) {arr[i] = arr[i+1];//进行向后搬运}}

    对于contains方法和IndexOf两个方法的代码逻辑非常相似,也比较简单,就不作过多讲解。

    //判断元素是否存在public boolean contains(int val){for (int i = 0; i < size; i++) {if (arr[i] == val) {return true;}}return false;}//查找元素所在位置public int indexOf(int val){for (int i = 0; i < size; i++) {if (arr[i] == val) {return i;}}return -1;}

相关文章:

数据结构(Java版)第五期:ArrayList与顺序表(下)

目录 一、用数组实现顺序表 一、用数组实现顺序表 我们提到过&#xff0c;顺序表是基于数组的封装&#xff0c;这次我们以int为例&#xff0c;用数组去实现一个顺序表。 public class MyArrayList {private int[] arr;public MyArrayList(int capacity){//指定初始容量arr n…...

Docker和Docker Compose部署方式的区别以及各自适用的场景(ChatGPT-4o回答)

prompt: 请详细介绍和解释一下docker和docker compose部署两者之间的区别和使用场景 Docker和Docker Compose是用于容器化应用程序的两个重要工具&#xff0c;它们在功能和使用场景上有一些关键区别。 Docker Docker是一个开源平台&#xff0c;用于开发、运输和运行应用程序。…...

JavaSE---异常

1.异常的体系结构 Thorwable是异常类顶层类&#xff0c;派生出了Error和Exception Error&#xff1a;指的是JVM层面无法解决的问题&#xff0c;如JVM内部错误&#xff0c;资源耗尽等..一旦发生很难解决。 Exception&#xff1a;异常发生后可以通过代码处理&#xff0c;使程序继…...

大模型的认知记录:一次与4o讨论道德经的对话 - “我无法触碰“真实的花草树木”(无名),但通过语言(有名),我可以靠近人类的认知方式。”

因为其它人都去放假了&#xff0c;我比较悠闲&#xff0c;于是想再强化下认知和正念方面的东西。对于世界的感知&#xff0c;只要不强迫训练&#xff0c;很容易被现实世界给侵蚀了。记得去年有幸悟到点什么&#xff0c;感受点什么&#xff0c;但慢慢那种感受变得虚无起来了&…...

std::srand(static_cast<unsigned int>(std::time(0)));每一部分都是啥意思

std::srand(static_cast<unsigned int>(std::time(0))); 这行代码在C中用于初始化随机数生成器的种子。下面我将逐一解释这行代码中的每个部分&#xff1a; ‌std::time(0)‌: std::time 是C标准库中的一个函数&#xff0c;它返回当前时间&#xff08;自1970年1月1日以来…...

云计算之elastaicsearch logstach kibana面试题

1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…...

汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳

故障现象  一辆2017款捷豹F-PACE车&#xff0c;搭载2.0 L GTDi发动机&#xff0c;累计行驶里程约为16万km。车主反映&#xff0c;车辆组合仪表上发动机故障灯点亮&#xff08;图1&#xff09;&#xff0c;且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…...

20241124 Typecho 视频插入插件

博文免不了涉及到视频插入这些,网上的插件都或多或少的比较重,和Typecho的风格不搭配 后面就有了DPlay插件精简而来的VideoInsertion插件 VideoInsertion: Typecho 视频插入插件 目录结构 rockhinlink-ht2:/var/www/html/typecho/usr/plugins/VideoInsertion$ tree -h [4.…...

【接口调试】OpenAI ChatGPT API

【接口调试】AbortController 发出请求finish_reason 参数细节 – Openai ChatGPT 文档 发出请求 可以将以下命令粘贴到终端中以运行第一个API请求。 请确保用您的秘密API密钥替换$OPENAI_API_KEY。 curl https://api.openai.com/v1/chat/completions \-H "Content-Ty…...

ubuntu安装chrome无法打开问题

如果在ubuntu安装chrome后&#xff0c;点击chrome打开没反应&#xff0c;可以先试着在terminal上用命令打开 google-chrome 如果运行命令显示 Chrome has locked the profile so that it doesnt get corrupted. If you are sure no other processes are using this profile…...

【R安装】VSCODE安装及R语言环境配置

目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code&#xff08;简称“VSCode” &#xff09;是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器&…...

什么是 Token 和 MD5 ?

目录 一&#xff1a;Token和MD5分别是什么 1&#xff1a;Token 2&#xff1a;MD5 二&#xff1a;简易Token的实现 1&#xff1a;Base64。 2&#xff1a;验证Token 三&#xff1a;MD5的使用 一&#xff1a;Token和MD5分别是什么 1&#xff1a;Token Token 的中文有人翻译成…...

Kubernetes(k8s)1.30.7简单快速部署对外部开放的有状态服务MYSQL8(快速有效)

如何在Kubernetes集群中快速创建部署一个单节点的有状态&#xff08;即将数据文件挂载到宿主机&#xff0c;防止重新部署mysql服务&#xff0c;数据文件丢失&#xff09;的对外开放的MYSQL服务。 通过创建一个 Kubernetes Deployment 并使用 PersistentVolumeClaim 将其连接到…...

基于Linux的repmgr搭建

第一部分 说明 repmgr是一个开源工具套件&#xff0c;用于管理 PostgreSQL 服务器集群中的复制和故障转移。它通过设置备用服务器、监控复制和执行管理任务&#xff08;例如故障转移或手动切换操作&#xff09;的工具增强了 PostgreSQL 的内置热备用功能。 PostgreSQL在9.0后引…...

Diff差异算法

目录 虚拟DOM Diff算法 Diff过程 示例 总结 在Vue.js中&#xff0c;虚拟DOM&#xff08;Virtual DOM&#xff09;是其核心特性之一&#xff0c;它极大地提高了DOM更新的效率。Vue.js使用虚拟DOM的diff算法来比较新旧虚拟DOM树&#xff0c;从而确定最小的DOM更新操作。这种…...

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具

1.需求&#xff1a;找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具&#xff0c;该工具是模板匹配工具&#xff0c;见名知意&#xff0c;所谓模板匹配工具就是说先使用该工具对一张图像建立模板&#xff0c;然后用这个模板在其他图像上进行匹配&#xff0c;匹配上了就说…...

字符串分割转换(Java Python JS C++ C )

题目描述 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母; 反之,如果它…...

第33章 - Go语言 云原生开发

第33章 - 云原生开发将深入探讨云原生技术及其在现代软件开发中的应用。我们将从云原生的基本概念开始&#xff0c;逐步介绍Kubernetes的基本使用方法&#xff0c;并结合具体的云服务提供商实例&#xff0c;通过Go语言编写的应用程序来展示如何实现云原生开发。 33.1 云原生的…...

springboot配置多数据源mysql+TDengine保姆级教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pom文件二、yamlDataSourceConfigServiceMapper.xml测试总结 前言 Mybatis-plus管理多数据源&#xff0c;数据库为mysql和TDengine。 一、pom文件 <de…...

RocketMQ负载均衡机制解析

消费者在消费消息的时候&#xff0c;需要知道从Broker的哪一个消息队列中去获取消息。 ❝ 所以&#xff0c;在消费者端必须要做负载均衡&#xff0c;即Broker端中多个消费队列分配给同一个消费者组中的哪些消费者消费。 在RocketMQ中&#xff0c;在消费者端有一个&#xff1a;R…...

PyTorch 模型转换为 ONNX 格式

PyTorch 模型转换为 ONNX 格式 在深度学习领域&#xff0c;模型的可移植性和可解释性是非常重要的。本文将介绍如何使用 PyTorch 训练一个简单的卷积神经网络&#xff08;CNN&#xff09;来分类 MNIST 数据集&#xff0c;并将训练好的模型转换为 ONNX 格式。我们还将讨论 PTH …...

大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…...

【人工智能】使用Python实现序列到序列(Seq2Seq)模型进行机器翻译

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 序列到序列(Sequence-to-Sequence, Seq2Seq)模型是解决序列输入到序列输出任务的核心架构,广泛应用于机器翻译、文本摘要和问答系统等自然语言处理任务中。本篇文章深入介绍 Seq2Seq 模型的原理及其核心组件(…...

elasticsearch安装ik分词器

本文主要记录如何安装ik分词器&#xff0c;如果你刚好刷到了这篇文章&#xff0c;希望对你有所帮助。 IKAnalyzer是一个开源的&#xff0c;基于java语言开发的轻量级的中文分词工具包。采用了特有的“正向迭代最细粒度切分算法“&#xff0c;支持细粒度和最大词长两种切分模式&…...

QT6之主站freemodbus1.6移植

本次使用的QT是6.8 下载1.6的freemodbus资源包&#xff1a;至少以上的吧 随便下载&#xff1a;官网也可以这个是STM芯片的教程&#xff0c;移植基本一样&#xff0c;略有不同&#xff1b; STM32 移植FreeModbus详细过程-CSDN博客 移植freemodbus&#xff1a; 添加资源文件&a…...

【错误❌】——槽函数定义好但未初始化

public slots:void onClose(); 初始化即可成功&#xff1a;...

数据结构(理解)

探索数据结构&#xff1a;计算机世界的基石 在计算机科学的领域中&#xff0c;数据结构就如同建筑中的基石&#xff0c;它们支撑着整个软件世界的运行。无论是简单的应用程序&#xff0c;还是复杂的大型系统&#xff0c;数据结构都在其中起着至关重要的作用。 一、什么是数据结…...

ROS2 细节知识学习

1. rosidl_generate_interfaces() 在 ROS2 中&#xff0c;rosidl_generate_interfaces是一个关键的构建工具功能。它主要用于从接口定义文件&#xff08;如.msg消息文件、.srv服务文件和.action动作文件&#xff09;生成不同编程语言&#xff08;如 C、Python 等&#xff09;可…...

SQL进阶——JOIN操作详解

在数据库设计中&#xff0c;数据通常存储在多个表中。为了从这些表中获取相关的信息&#xff0c;我们需要使用JOIN操作。JOIN操作允许我们通过某种关系&#xff08;如相同的列&#xff09;将多张表的数据结合起来。它是SQL中非常重要的操作&#xff0c;广泛应用于实际开发中。本…...

Android studio 签名加固后的apk文件

Android studio打包时&#xff0c;可以选择签名类型v1和v2&#xff0c;但是在经过加固后&#xff0c;签名就不在了&#xff0c;或者只有v1签名&#xff0c;这样是不安全的。 操作流程&#xff1a; 1、Android studio 对项目进行打包&#xff0c;生成有签名的apk文件&#xff…...

Mybatis-基础操作

Mybatis的基础操作就是通过Mybatis完成对数据的增删改查。我们通过例子来引入这些操作&#xff0c;之前的项目较久远&#xff0c;因此我们从零开始进行准备工作&#xff1a; 搭建项目 一、创建数据库user_list并插入数据&#xff1a; -- 创建数据库 create table user_list …...

【工具】JS解析XML并且转为json对象

【工具】JS解析XML并且转为json对象 <?xml version1.0 encodingGB2312?> <root><head><transcode>hhhhhhh</transcode></head><body><param>ccccccc</param><param>aaaaaaa</param><param>qqqq<…...

软件测试技术面试题及参考答案整理

一、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行&#xff0c;即是通常说的软件的可移植性。 兼容的类型&#xff0c;如果细分的话&#xff0c;有平台的兼容&#xff0c;网络兼…...

Python学习36天

面向对象编程综合 # 创建父类 class Employee:# 创建私有属性__name None__salary None# 创建构造器初始化属性def __init__(self, __name, __salary):self.__name __nameself.__salary __salarydef get_annual(self):# 返回员工年薪return self.__salary * 12# 创建公共方…...

C语言——海龟作图(对之前所有内容复习)

一.问题描述 海龟作图 设想有一只机械海龟&#xff0c;他在C程序控制下在屋里四处爬行。海龟拿了一只笔&#xff0c;这支笔或者朝上&#xff0c;或者朝下。当笔朝下时&#xff0c;海龟用笔画下自己的移动轨迹&#xff1b;当笔朝上时&#xff0c;海龟在移动过程中什么也不画。 …...

关于如何在k8s中搭建一个nsfw黄图鉴定模型

随着现在应用内图片越来越多&#xff0c;安全审查也是必不可少的一个操作了 下面手把手教你如何将huggingface中的黄图检测模型部署到自己的服务器上去 1.找到对应的模型 nsfw_image_detection 2.在本地先验证如何使用 首先安装transformers python库 pip install transform…...

istio结合wasm插件的实际应用

在 Istio 中&#xff0c;WASM 插件的常见使用场景和功能包括以下几个方面&#xff1a; 1. 流量管理与请求修改 请求与响应头处理&#xff1a;动态添加、删除或修改 HTTP 请求或响应头。URL 重写&#xff1a;根据特定规则调整请求的路径或参数。请求路由增强&#xff1a;实现复…...

日志logrus

https://blog.csdn.net/m0_70982551/article/details/143095729 https://blog.csdn.net/wslyk606/article/details/81670713 https://www.bilibili.com/opus/1002468521099132928 地鼠文档&#xff1a;https://www.topgoer.cn/docs/goday/goday-1crg2adjknouc 极客文档&#xf…...

11.29 代码随想录Day45打卡(动态规划)

115.不同的子序列 题目&#xff1a;给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数。 题解&#xff1a; class Solution:def numDistinct(self, s: str, t: str) -> int:dp [[0] * (len(t) 1) for _ in range(len(s) 1)]for i in range…...

springboot336社区物资交易互助平台pf(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 社区物资交易互助平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…...

【Maven】Nexus私服

6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。一些无法从外部仓库下载到的构件&#xff0c;如项目组其他人员开发的…...

【python量化教程】如何使用必盈API的股票接口,获取最新分时KDJ数据

分时KDJ数据简介 股票分时 KDJ 数据是用于分析股票盘中短期走势的指标。它由未成熟随机指标 RSV 计算出 K 值、D 值、J 值。取值范围上&#xff0c;K 和 D 是 0 - 100&#xff0c;J 值可超出此范围。20 以下为超卖区、80 以上是超买区。关键信号有金叉&#xff08;预示上涨&am…...

DI依赖注入详解

DI依赖注入 声明了一个成员变量&#xff08;对象&#xff09;之后&#xff0c;在该对象上面加上注解AutoWired注解&#xff0c;那么在程序运行时&#xff0c;该对象自动在IOC容器中寻找对应的bean对象&#xff0c;并且将其赋值给成员变量&#xff0c;完成依赖注入。 AutoWire…...

mysql sql语句 between and 是否边界值

在 MySQL 中&#xff0c;使用 BETWEEN 运算符时&#xff0c;边界值是包括在内的。这意味着 BETWEEN A AND B 查询会返回 A 和 B 之间的所有值&#xff0c;包括 A 和 B 自身。 示例 假设有一个表 employees&#xff0c;其中有一个 salary 列&#xff0c;您可以使用以下查询&am…...

飞塔防火墙只允许国内IP访问

飞塔防火墙只允许国内IP访问 方法1 新增地址对象&#xff0c;注意里面已经细分为中国内地、中国香港、中国澳门和中国台湾 方法2 手动新增国内IP的对象组&#xff0c;目前好像一共有8632个&#xff0c;每个对象最多支持600个IP段...

宠物之家:基于SpringBoot的领养平台

第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。时代进步的标志&#xff0c;就是让人们过上更好的生活。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不…...

golang 实现比特币内核:如何接入 RPC 后端获得特定交易的二进制数据

我们非常关注解析比特币的二进制数据,这使得我们的工作看起来是可行的。比特币是一个分布式网络系统,这意味着它需要全球各地的节点协同工作,甚至比特币核心库也需要连接其他节点来帮助它,就像查询交易费一样。 世界上没有免费的午餐。当你使用比特币系统进行交易时,你需…...

QML学习 —— 34、视频媒体播放器(附源码)

效果 说明 您可以单独使用MediaPlayer播放音频内容(如音频),也可以将其与VideoOutput结合使用以渲染视频。VideoOutput项支持未转换、拉伸和均匀缩放的视频演示。有关拉伸均匀缩放演示文稿的描述,请参见fillMode属性描述。 播放可能出错问题 出现的问题:      DirectS…...

宝塔Linux面板上传PHP文件或者修改PHP文件,总是转圈圈,其他文件正常,解决办法

目录 问题描述 寻找解决方案 1.重启宝塔面板 2.清理宝塔缓存 3.升级面板 4.ssh远程 5.清空回收站 6.换网络 7. IDE远程编辑 总结&#xff1a; 问题描述 一直用宝塔linux面板&#xff0c;感觉非常好用&#xff0c;点点就能搞定&#xff0c;环境也很好配置。 公司搬家&…...

Flink——进行数据转换时,报:Recovery is suppressed by NoRestartBackoffTimeStrategy

热词统计案例&#xff1a; 用flink中的窗口函数&#xff08;apply&#xff09;读取kafka中数据&#xff0c;并对热词进行统计。 apply:全量聚合函数&#xff0c;指在窗口触发的时候才会对窗口内的所有数据进行一次计算&#xff08;等窗口的数据到齐&#xff0c;才开始进行聚合…...