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

Java集合ArrayList详解

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

ArrayList 继承了 AbstractList ,并实现了 List 接口。

Java 数组 与 ArrayList

在Java中,我们需要先声明数组的大小,然后才能使用它。一旦声明了数组的大小,就很难更改它。

要解决此问题,我们可以使用ArrayList类。  java.util包中存在的ArrayList类允许我们创建可调整大小的数组。

使用前需要引入它,语法格式如下:

import java.util.ArrayList; // 引入 ArrayList 类

与数组不同,当我们向数组列表添加或删除元素时,数组列表(ArrayList类的对象)可以自动调整其容量。 因此,数组列表也称为动态数组。

创建ArrayList

这是我们可以在Java中创建数组列表的方法:

ArrayList<Type> arrayList= new ArrayList<>();

此处,Type指示数组列表的类型。例如,

//创建整数类型arraylist
ArrayList<Integer> arrayList = new ArrayList<>();//创建字符串类型arraylist
ArrayList<String> arrayList = new ArrayList<>();

在上面的程序中,我们使用了Integer和String。 在这里,Integer是int类型的相应包装类。

包装类是包装原始数据类型的类。例如,Integer类包装了int类型,Float类包装了Float类型,等等。

注意:我们不能创建原始数据类型(如int,float,char等)的数组列表。相反,我们必须使用它们对应的包装器类。

对于字符串,String是一个类,没有包装类。因此,我们按原样使用String。

我们还可以使用List接口创建ArrayList。这是因为ArrayList类实现了List接口。

List<String> list = new ArrayList<>();

ArrayList的方法

ArrayList 提供了允许我们执行数组列表操作的各种方法。

将元素添加到ArrayList

1.使用 add() 方法

要将单个元素添加到数组列表,我们使用add()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args){ArrayList<String> animals = new ArrayList<>();//添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("ArrayList: " + animals);}
}

输出结果

ArrayList: [Dog, Cat, Horse]

2.使用索引号

我们还可以使用索引将元素添加到数组列表中。例如,

import java.util.ArrayList;class Main {public static void main(String[] args){ArrayList<String> animals = new ArrayList<>();//添加元素animals.add(0,"Dog");animals.add(1,"Cat");animals.add(2,"Horse");System.out.println("ArrayList: " + animals);}
}

输出结果

ArrayList: [Dog, Cat, Horse]

3.将一个数组列表的元素添加到另一个数组列表

要将数组列表的所有元素添加到新的数组列表,请使用addAll()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args){ArrayList<String> mammals = new ArrayList<>();mammals.add("Dog");mammals.add("Cat");mammals.add("Horse");System.out.println("Mammals: " + mammals);ArrayList<String> animals = new ArrayList<>();animals.add("Crocodile");// 添加mammals所有元素到animalsanimals.addAll(mammals);System.out.println("Animals: " + animals);}
}

输出结果

Mammals: [Dog, Cat, Horse]
Animals: [Crocodile, Dog, Cat, Horse]

使用asList()初始化ArrayList

与数组不同,我们不能直接初始化数组列表。 但是,我们可以使用Arrays类的asList()方法来达到相同的效果。

为了使用asList()方法,我们必须先导入 java.util.Arrays 包。

例如,

import java.util.ArrayList;
import java.util.Arrays;class Main {public static void main(String[] args) {//创建数组列表ArrayList<String> animals = new ArrayList<>(Arrays.asList("Cat", "Cow", "Dog"));System.out.println("ArrayList: " + animals);//访问数组列表中的元素String element = animals.get(1);System.out.println("访问元素: " + element);}
}

输出结果

ArrayList: [Cat, Cow, Dog]
访问元素: Cow

在上面的示例中,请注意以下表达式:

new ArrayList<>(Arrays.asList(("Cat", "Cow", "Dog"));

在这里,我们首先在3个元素的数组:"Cat","Cow",和"Dog"。然后,该asList()方法用于将数组转换为数组列表。

访问ArrayList的元素

1.使用get()方法

要随机访问数组列表的元素,我们使用get()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Horse");animals.add("Cat");System.out.println("ArrayList: " + animals);//从数组列表中获取元素String str = animals.get(0);System.out.print("索引0处的元素: " + str);}
}

输出结果

ArrayList: [Dog, Horse, Cat]
索引0处的元素: Dog

2.使用 iterator() 方法

要按顺序访问数组列表的元素,我们使用iterator()方法。我们必须导入 java.util.Iterator 包才能使用此方法。例如,

import java.util.ArrayList;
import java.util.Iterator;class Main {public static void main(String[] args){ArrayList<String> animals = new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");animals.add("Zebra");//创建一个Iterator对象Iterator<String> iterate = animals.iterator();System.out.print("ArrayList: ");//使用Iterator的方法访问元素while(iterate.hasNext()){System.out.print(iterate.next());System.out.print(", ");}}
}

输出结果

ArrayList: Dog, Cat, Horse, Zebra,

注意事项

  • hasNext() - 如果数组列表中有下一个元素,则返回true。

  • next()  -  返回数组列表中的下一个元素

更改ArrayList元素

要更改数组列表的元素,我们可以使用set()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("ArrayList: " + animals);//更改数组列表的元素animals.set(2, "Zebra");System.out.println("修改后的ArrayList: " + animals);}
}

输出结果

ArrayList: [Dog, Cat, Horse]
修改后的ArrayList: [Dog, Cat, Zebra]

删除ArrayList元素

1.使用 remove() 方法

要从数组列表中删除元素,我们可以使用remove()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals = new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("初始ArrayList: " + animals);//从索引2中删除元素String str = animals.remove(2);System.out.println("最终ArrayList: " + animals);System. out.println("删除元素: " + str);}
}

输出结果

初始ArrayList: [Dog, Cat, Horse]
最终ArrayList: [Dog, Cat]
删除元素: Horse

2.使用 removeAll() 方法

要从数组列表中删除所有元素,我们使用removeAll()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals = new ArrayList<>();// 在ArrayList中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("初始ArrayList: " + animals);// 删除所有元素animals.removeAll(animals);System.out.println("最终ArrayList: " + animals);}
}

输出结果

初始ArrayList: [Dog, Cat, Horse]
最终ArrayList: []

3.使用 clear() 方法

我们还可以使用clear()方法从数组列表中删除所有元素。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("Initial ArrayList: " + animals);//删除所有元素animals.clear();System.out.println("Final ArrayList: " + animals);}
}

输出结果

初始ArrayList: [Dog, Cat, Horse]
最终ArrayList: []

注意:clear()方法比removeAll()方法更高效。

遍历 ArrayList

1.使用 for 循环

import java.util.ArrayList;class Main {public static void main(String[] args) {//创建数组列表ArrayList<String> animals = new ArrayList<>();animals.add("Cow");animals.add("Cat");animals.add("Dog");System.out.println("ArrayList: " + animals);//使用for循环System.out.println("访问所有元素: ");for(int i = 0; i < animals.size(); i++) {System.out.print(animals.get(i));System.out.print(", ");}}
}

输出结果

ArrayList: [Cow, Cat, Dog]
访问所有元素:
Cow, Cat, Dog,

2.使用 forEach 循环

import java.util.ArrayList;class Main {public static void main(String[] args) {// 创建数组列表ArrayList<String> animals = new ArrayList<>();animals.add("Cow");animals.add("Cat");animals.add("Dog");System.out.println("ArrayList: " + animals);//使用forEach循环System.out.println("访问所有元素:  ");for(String animal : animals) {System.out.print(animal);System.out.print(", ");}}
}

输出结果

ArrayList: [Cow, Cat, Dog]
访问所有元素:
Cow, Cat, Dog,

在两个示例中,我们都使用循环访问了数组列表的各个元素。

获取ArrayList的长度

要获取数组列表的长度,我们使用size()方法。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();// 在arrayList中添加元素animals.add("Dog");animals.add("Horse");animals.add("Cat");System.out.println("ArrayList: " + animals);//获取arrayList的大小System.out.println("arrayList的大小: " + animals.size());}
}

输出结果

ArrayList: [Dog, Horse, Cat]
arrayList的大小: 3

对ArrayList的元素进行排序

要对数组列表的元素进行排序,我们使用Collections类的sort()方法。为了使用它,我们必须先导入java.util.Collections包。

默认情况下,排序以字母或数字升序进行。例如,

import java.util.ArrayList;
import java.util.Collections;class Main {public static void main(String[] args){ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Horse");animals.add("Zebra");animals.add("Dog");animals.add("Cat");System.out.println("未排序的ArrayList: " + animals);//对数组列表进行排序Collections.sort(animals);System.out.println("排序后的ArrayList: " + animals);}
}

输出结果

未排序的ArrayList: [Horse, Zebra, Dog, Cat]
排序后的ArrayList: [Cat, Dog, Horse, Zebra]

要了解有关对数组列表进行排序的更多信息,请访问Java ArrayList sort。

Java ArrayList转换为数组

在Java中,我们可以使用toArray()方法将数组列表转换为数组。例如,

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals= new ArrayList<>();//在数组列表中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("ArrayList: " + animals);//创建一个新的String类型数组String[] arr = new String[animals.size()];//将ArrayList转换成数组animals.toArray(arr);System.out.print("Array: ");for(String item:arr) {System.out.print(item+", ");}}
}

输出结果

ArrayList: [Dog, Cat, Horse]
Array: Dog, Cat, Horse,

Java Array转换为ArrayList

我们还可以将数组转换为数组列表。为此,我们可以使用Arrays类的asList()方法。

要使用asList(),我们必须先导入java.util.Arrays包。例如,

import java.util.ArrayList;
import java.util.Arrays;class Main {public static void main(String[] args) {//创建一个字符串类型的数组String[] arr = {"Dog", "Cat", "Horse"};System.out.print("Array: ");//打印数组for(String str: arr) {System.out.print(str);System.out.print(" ");}//从数组创建ArrayListArrayList<String> animals = new ArrayList<>(Arrays.asList(arr));System.out.println("\nArrayList: " + animals);}
}

输出结果

Array: Dog, Cat, Horse
ArrayList: [Dog, Cat, Horse]

在上面的程序中,我们首先创建了String类型的数组arr。

然后,我们使用asList()方法将数组转换为数组列表。

Java ArrayList转换为字符串

要将数组列表转换为字符串,可以使用toString()方法。例如

import java.util.ArrayList;class Main {public static void main(String[] args) {ArrayList<String> animals = new ArrayList<>();//在ArrayList中添加元素animals.add("Dog");animals.add("Cat");animals.add("Horse");System.out.println("ArrayList: " + animals);//将ArrayList转换为字符串String str = animals.toString();System.out.println("String: " + str);}
}

输出结果

ArrayList: [Dog, Cat, Horse]
String: [Dog, Cat, Horse]

注意: toString()将整个数组列表转换为单个String。

其他的引用类型

ArrayList 中的元素实际上是对象,在以上实例中,数组列表元素都是字符串 String 类型。

如果我们要存储其他类型,而 <E> 只能为引用数据类型,这时我们就需要使用到基本类型的包装类。

基本类型对应的包装类表如下:

此外,BigInteger、BigDecimal 用于高精度的运算,BigInteger 支持任意精度的整数,也是引用类型,但它们没有相对应的基本类型。

ArrayList<Integer> li=new ArrayList<>();     // 存放整数元素
ArrayList<Character> li=new ArrayList<>();   // 存放字符元素

Java ArrayList更多方法

Java ArrayList 常用方法列表如下:

方法描述
add()将元素插入到指定位置的 arraylist 中
addAll()添加集合中的所有元素到 arraylist 中
clear()删除 arraylist 中的所有元素
clone()复制一份 arraylist
contains()判断元素是否在 arraylist
get()通过索引值获取 arraylist 中的元素
indexOf()返回 arraylist 中元素的索引值
removeAll()删除存在于指定集合中的 arraylist 里的所有元素
remove()删除 arraylist 里的单个元素
size()返回 arraylist 里元素数量
isEmpty()判断 arraylist 是否为空
subList()截取部分 arraylist 的元素
set()替换 arraylist 中指定索引的元素
sort()对 arraylist 元素进行排序
toArray()将 arraylist 转换为数组
toString()将 arraylist 转换为字符串
ensureCapacity()设置指定容量大小的 arraylist
lastIndexOf()返回指定元素在 arraylist 中最后一次出现的位置
retainAll()保留 arraylist 中在指定集合中也存在的那些元素
containsAll()查看 arraylist 是否包含指定集合中的所有元素
trimToSize()将 arraylist 中的容量调整为数组中的元素个数
removeRange()删除 arraylist 中指定索引之间存在的元素
replaceAll()将给定的操作内容替换掉数组中每一个元素
removeIf()删除所有满足特定条件的 arraylist 元素
forEach()遍历 arraylist 中每一个元素并执行特定操作

相关文章:

Java集合ArrayList详解

ArrayList 类是一个可以动态修改的数组&#xff0c;与普通数组的区别就是它是没有固定大小的限制&#xff0c;我们可以添加或删除元素。 ArrayList 继承了 AbstractList &#xff0c;并实现了 List 接口。 Java 数组 与 ArrayList 在Java中&#xff0c;我们需要先声明数组的大…...

React Dva项目 Model中编写与调用异步函数

上文 React Dva项目中模仿网络请求数据方法 中&#xff0c;我们用项目方法模拟了后端请求的数据 那么 今天我们就在models中尝试去使用一下这种异步获取数据的方法 之前 我们在文章 React Dva项目创建Model,并演示数据管理与函数调用 中已经接触过Model了 也可以理解为 它就是 …...

小程序自定义tabBar+Vant weapp

1.构建npm&#xff0c;安装Vant weapp&#xff1a; 1&#xff09;根目录下 &#xff0c;初始化生成依赖文件package.json npm init -y 2&#xff09;安装vant # 通过 npm 安装 npm i vant/weapp -S --production 3&#xff09;修改 package.json 文件 开发者工具创建的项…...

Dubbo+Zookeeper使用

说明&#xff1a;Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。 本文介绍Dubbo的简单使用及一些Dubbo功能特性&#xff0c;注册中心使用的是ZooKeeper&#xff0c;可在…...

短视频平台视频怎么去掉水印?

短视频怎么去水印&#xff0c;困扰很多人&#xff0c;例如&#xff0c;有些logo水印&#xff0c;动态水印等等&#xff0c;分享操作经验&#xff1a; 抖音作为中国最受欢迎的社交娱乐应用程序之一&#xff0c;已成为许多人日常生活中不可或缺的一部分。在使用抖音过程中&#x…...

Stable Diffusion - Style Editor 和 Easy Prompt Selector 提示词插件配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132122450 Style Editor 插件&#xff1a; cd extensions git clone https://ghproxy.com/https://github.com/chrisgoringe/Styles-Editor报错&…...

Stable Diffusion - SDXL 模型测试 (DreamShaper 和 GuoFeng v4) 与全身图像参数配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132085757 图像来源于 GuoFeng v4 XL 模型&#xff0c;艺术风格是赛博朋克、漫画、奇幻。 全身图像是指拍摄对象的整个身体都在画面中的照片&…...

中介者模式(Mediator)

中介者模式是一种行为设计模式&#xff0c;可以减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互&#xff0c;迫使它们通过一个封装了对象间交互行为的中介者对象来进行合作&#xff0c;从而使对象间耦合松散&#xff0c;并可独立地改变它们之间的交互。中介者…...

SpringBoot使用@Autowired将实现类注入到List或者Map集合中

前言 最近看到RuoYi-Vue-Plus翻译功能 Translation的翻译模块配置类TranslationConfig&#xff0c;其中有一个注入TranslationInterface翻译接口实现类的写法让我感到很新颖&#xff0c;但这种写法在Spring 3.0版本以后就已经支持注入List和Map&#xff0c;平时都没有注意到这…...

【linux目录的权限和粘滞位】

目录&#xff1a; 目录的权限粘滞位总结 目录的权限 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中. 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件. 粘…...

TP DP PP 并行训练方法介绍

这里写目录标题 张量并行TP流水线并行 PPnaive模型并行GPipePipeDream 数据并行DPFSDP 张量并行TP 挖坑 流水线并行 PP 经典的流水线并行范式有Google推出的Gpipe&#xff0c;和微软推出的PipeDream。两者的推出时间都在2019年左右&#xff0c;大体设计框架一致。主要差别为…...

P005 – Python操作符、操作数和表达式

在Python中&#xff0c;操作符用于对值或变量进行操作。操作数是操作符作用的值或变量。表达式是由操作符、操作数和其他表达式组合而成的&#xff0c;可以求得一个值。 在本文中&#xff0c;我们将探讨Python中的不同类型的操作符&#xff0c;学习如何与操作数一起使用它们来…...

SQL92 SQL99 语法 Oracle 、SQL Server 、MySQL 多表连接、Natural 、USING

SQL92 VS SQL 99 语法 92语法 内连接 from table1&#xff0c; table2 where table1.col table2.col 外连接 放在 从表 左连接&#xff1a; from table1&#xff0c; table2 where table1.col table2.col() 右连接&#xff1a; from table1&#xff0c; table2 where table…...

物联网平台使用笔记

阿里云的IOT平台限制了50个设备。排除 移动云的限制较少&#xff0c;这里试用下。 创建完产品&#xff0c;接入设备后。使用MQTT客户端测试 其中client id 为设备id&#xff0c; username 为产品id&#xff0c; password 可以使用设备调试那里生成的。或使用官方token.exe 生成…...

Python-flask项目入门

一、flask对于简单搭建一个基于python语言-的web项目非常简单 二、项目目录 示例代码 git路径 三、代码介绍 1、安装pip依赖 通过pip插入数据驱动依赖pip install flask-sqlalchemy 和 pip install pymysql 2.配置数据源 config.py DIALECT mysql DRIVER pymysql USERN…...

基于数据库 Sqlite3 的 root 管理系统

1.服务器 1.1服务器函数入口 #include "server.h"int main(int argc, char const *argv[]) {char buf[128] {0};char buf_ID[256] {0};// 接收报错信息判断sqlite3 *db;// 创建员工信息的表格,存在则打开db Sqlite_Create();if (db NULL){printf("sqlite_…...

Hadoop 之 Hive 4.0.0-alpha-2 搭建(八)

Hadoop 之 Hive 搭建与使用 一.Hive 简介二.Hive 搭建1.下载2.安装1.解压并配置 HIVE2.修改 hive-site.xml3.修改 hadoop 的 core-site.xml4.启动 三.Hive 测试1.基础测试2.建库建表3.Java 连接测试1.Pom依赖2.Yarm 配置文件3.启动类4.配置类5.测试类 一.Hive 简介 Hive 是基于…...

vue3常用API之学习笔记

目录 一、setup函数 vue2与vue3变量区别 二、生命周期 三、reactive方法 四、ref方法 1、简介 2、使用 3、ref与reactive 4、获取标签元素或组件 五、toRef 1、简介 2、ref与toRef的区别 六、toRefs 七、shallowReactive 浅reactive 1、简介 2、shallowreactiv…...

Python 程序设计入门(005)—— 字符串操作

Python 程序设计入门&#xff08;005&#xff09;—— 字符串操作 目录 Python 程序设计入门&#xff08;005&#xff09;—— 字符串操作一、字符串切片与连接1、切片的索引方式2、切片操作的基本表达式3、 切片操作举例4、字符串连接 二、字符串替换&#xff1a;replace() 方…...

怎样将项目jar包放到服务器上

目录 1、在配置文件中配置账号密码 2.在父级的pom里面&#xff0c;加上这个标签 3. deploy部署 4. 注&#xff1a;这两个id得匹配上&#xff08;原因&#xff1a;有的人会只有上传到测试包的权限&#xff0c;id对应&#xff0c;拥有账号密码的才能有权限&#xff09; 5.子项…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...