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

JAVA基础:Collections 工具类实战指南-从排序到线程安全

在 Java 开发中,集合类几乎贯穿每一个项目,而Collections工具类提供了一系列强大的方法,用于操作和增强集合的功能。无论是排序、查找还是线程安全的封装,Collections工具类都是提升代码效率和质量的重要工具。

一、Collections 工具类概述

java.util.Collections是 Java 提供的一个工具类,主要用于操作集合类(如 List、Set 和 Map)。其核心方法包括:

1.排序操作:如sort()和reverseOrder()。

2.查找与填充:如binarySearch()和fill()。

3.其他操作:如shuffle()、swap()等。

4.线程安全包装:如synchronizedList()和synchronizedMap()。

5.不可变集合:如unmodifiableList()。

二、排序操作:让数据更有序

Collections.sort()是最常用的方法之一,可对 List 进行自然排序或自定义排序。

示例 1:自然排序

import java.util.*;public class CollectionsSortExample {public static void main(String[] args) {List<String> list = new ArrayList<>(Arrays.asList("banana", "apple", "cherry"));// 自然排序Collections.sort(list);System.out.println("自然排序后: " + list);  // 输出: [apple, banana, cherry]}
}

示例 2:自定义排序

Collections.sort(list, Comparator.reverseOrder());
System.out.println("降序排序后: " + list);  // 输出: [cherry, banana, apple]

实战场景:商品价格排序

假设有一个商品列表,需要按价格从低到高排序:

List<Product> products = Arrays.asList(new Product("Apple", 100),new Product("Banana", 60),new Product("Cherry", 120)
);Collections.sort(products, Comparator.comparingInt(Product::getPrice));
System.out.println("按价格排序后的商品: " + products);

三、查找与填充

1. Collections.binarySearch()

binarySearch()用于在排序后的列表中快速查找元素的位置。

import java.util.*;public class CollectionsBinarySearchExample {public static void main(String[] args) {List<Integer> list = Arrays.asList(1, 3, 5, 7, 9);// 必须先排序Collections.sort(list);int index = Collections.binarySearch(list, 5);System.out.println("元素 5 的索引位置: " + index);  // 输出: 2}
}

注意:

binarySearch()的前提是列表必须是有序的,否则结果不可预测。

2. Collections.fill()

fill()可将集合中的所有元素替换为指定值。

import java.util.*;
public class CollectionsFillExample {public static void main(String[] args) {List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));Collections.fill(list, "X");System.out.println("填充后的集合: " + list);  // 输出: [X, X, X]}
}

四、其他操作

1. Collections.shuffle()

shuffle()用于将集合中的元素随机排列,适合打乱顺序的场景,如洗牌程序或抽奖工具。

Collections.shuffle(list);
System.out.println("打乱顺序后的集合: " + list);

实战场景:洗牌功能实现

List<String> deck = new ArrayList<>(Arrays.asList("♥A", "♥2", "♥3", "♠A", "♠2", "♠3"
));
Collections.shuffle(deck);
System.out.println("洗牌后的结果: " + deck);

2. Collections.swap()

swap()方法可交换集合中两个元素的位置。

import java.util.*;public class SwapExample {public static void main(String[] args) {List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));Collections.swap(list, 0, 2);System.out.println("交换后的列表: " + list);  // 输出: [C, B, A]}
}

实战场景:数组中最小值和最大值交换

List<Integer> list = Arrays.asList(3, 5, 1, 9, 7);
int minIndex = list.indexOf(Collections.min(list));
int maxIndex = list.indexOf(Collections.max(list));
Collections.swap(list, minIndex, maxIndex);
System.out.println("交换后: " + list);  // 示例输出: [9, 5, 1, 3, 7]

五、线程安全包装

在多线程环境中,原生集合类如ArrayList并不是线程安全的,可以通过Collections.synchronizedXXX()方法生成线程安全的集合。

示例 1:线程安全的集合包装

import java.util.*;public class SynchronizedCollectionsExample {public static void main(String[] args) {List<String> list = new ArrayList<>();// 转换为线程安全的 ListList<String> synchronizedList = Collections.synchronizedList(list);synchronizedList.add("Thread-safe");System.out.println("线程安全的集合: " + synchronizedList);}
}

实战场景:多线程统计数据

List<Integer> scores = Collections.synchronizedList(new ArrayList<>());Runnable task = () -> {for (int i = 0; i < 1000; i++) {scores.add(i);}
};Thread t1 = new Thread(task);
Thread t2 = new Thread(task);t1.start();
t2.start();try {t1.join();t2.join();
} catch (InterruptedException e) {e.printStackTrace();
}System.out.println("线程安全的集合大小: " + scores.size());

六、不可变集合:安全共享数据

不可变集合是指在创建后无法修改的集合类型,适合在多线程环境下共享数据。

示例 1: 创建不可变集合

 unmodifiableList
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
List<String> unmodifiableList = Collections.unmodifiableList(list);// 尝试修改会抛出 UnsupportedOperationException
try {unmodifiableList.add("D");
} catch (UnsupportedOperationException e) {System.out.println("Cannot modify immutable list!");
}

实战场景:配置文件的共享

Map<String, String> config = new HashMap<>();
config.put("host", "localhost");
config.put("port", "8080");Map<String, String> unmodifiableConfig = Collections.unmodifiableMap(config);// 多个线程可以安全地读取配置
Runnable task = () -> {System.out.println("Host: " + unmodifiableConfig.get("host"));
};Thread t1 = new Thread(task);
Thread t2 = new Thread(task);t1.start();
t2.start();

七、性能优化建议

1.避免频繁排序

对于动态数据的排序,建议使用TreeSet或PriorityQueue。

2.选择合适的线程安全集合

在频繁读写场景中,优先考虑ConcurrentHash-Map或CopyOnWriteArrayList。

3.减少锁竞争

使用synchronizedList时,尽量避免在循环中频繁调用修改操作。

八、综合实战:线程安全排行榜

以下案例展示如何结合Collections工具类创建线程安全的排行榜:

import java.util.*;public class LeaderboardExample {public static void main(String[] args) {// 创建线程安全的排行榜(List)List<Integer> scores = Collections.synchronizedList(new ArrayList<>());// 添加分数scores.addAll(Arrays.asList(85, 90, 75, 95, 88));// 排序Collections.sort(scores, Collections.reverseOrder());System.out.println("排行榜: " + scores);  // 输出: [95, 90, 88, 85, 75]// 查找某个分数的排名int rank = Collections.binarySearch(scores, 90, Collections.reverseOrder());System.out.println("分数 90 的排名: 第 " + (rank + 1) + " 名");}
}

相关文章:

JAVA基础:Collections 工具类实战指南-从排序到线程安全

在 Java 开发中&#xff0c;集合类几乎贯穿每一个项目&#xff0c;而Collections工具类提供了一系列强大的方法&#xff0c;用于操作和增强集合的功能。无论是排序、查找还是线程安全的封装&#xff0c;Collections工具类都是提升代码效率和质量的重要工具。 一、Collections …...

【计算机视觉】TorchVision 深度解析:从核心功能到实战应用 ——PyTorch 官方计算机视觉库的全面指南

TorchVision 深度解析&#xff1a;从核心功能到实战应用 ——PyTorch 官方计算机视觉库的全面指南 1. TorchVision 项目概览核心模块 2. 实战案例&#xff1a;10 大应用场景详解案例 1&#xff1a;使用预训练 ResNet 进行图像分类代码实现常见问题相关论文 案例 2&#xff1a;加…...

case和字符串操作

使用if选择结构 if [];then elif [];then #注意这个地方,java是else if else ; fi 使用for循环结构 使用for循环&#xff0c;语法结构如下所示&#xff1a; for 变量名 in 值1 值2 值3 #值的数量决定循环任务的次数 do命令序列 done#循环输出1到10 for i in {1..10} #注…...

Golang|外观模式和具体逻辑

最终返回的是Document的切片&#xff0c;然后取得Bytes自己再去做反序列化拿到文档的各种详细信息。 外观模式是一种结构型设计模式&#xff0c;它的目的是为复杂的子系统提供一个统一的高层接口&#xff0c;让外部调用者&#xff08;客户端&#xff09;可以更简单地使用子系统…...

关于kafka

1.为什么需要消息队列 举个经典的例子。 你是一个网购达人&#xff0c;经常在网上购物。快递小哥到了你的小区后&#xff0c;立刻给你打电话说&#xff1a;“你的快递到了&#xff0c;请马上来取。” 但你是一个合格的牛马&#xff0c;在上班&#xff0c;不方便取快递&#…...

OpenCV 图形API(67)图像与通道拼接函数-----水平拼接(横向连接)两个输入矩阵(GMat 类型)函数concatHor()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于水平拼接两个 GMat 矩阵&#xff0c;要求输入矩阵的行数必须一致: GMat A { 1, 4,2, 5,3, 6 }; GMat B { 7, 10,8, 11,9, 12 }; GM…...

夜莺 v8.0.0-beta.10 部署

夜莺 v8.0.0-beta.10 部署 1. mariadb-server2. Redis安装3. 下载 n9e-v8.0.0-beta.10-linux-amd64.tar.gz设置 root 用户密码配置文件 配置mariadb的登录密码导入数据库表结构配置为 systemd 启动服务重新加载 systemd配置日志 访问夜莺VictoriaMetrics 时序数据库安装接入数据…...

HTML5好看的水果蔬菜在线商城网站源码系列模板7

文章目录 1.设计来源1.1 主界面1.2 关于我们界面1.3 商城界面1.4 商品信息界面1.5 我的账户界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#…...

优化问题中变量分类与作用分析

优化问题中的变量分类与作用 在优化问题中&#xff0c;变量的定义和作用因问题类型和建模需求而异。以下从决策变量、控制变量的区别与联系出发&#xff0c;结合其他相关变量进行系统分析&#xff1a; 1. 决策变量&#xff08;Decision Variables&#xff09; 定义&#xff1a…...

RSS‘25|CMU提出统一空中操作框架:以末端执行器为中心,无人机实现高精度遥操作

导读在科技飞速发展的当下&#xff0c;机器人技术不断拓展其应用边界&#xff0c;空中操作领域成为了研究的热点之一。无人空中操纵器&#xff08;UAMs&#xff09;凭借其在高空复杂任务中的巨大潜力&#xff0c;正逐渐改变着诸如高空设备维护、桥梁检测等传统行业的作业模式&a…...

智能指针之设计模式6

本系列文章探讨了智能指针和设计模式的关系&#xff0c;前面五篇文章介绍的是使用设计模式实现了智能指针的相关特性&#xff0c;比如使用工厂模式控制了智能指针对象的创建&#xff0c;使用代理模式控制了资源对象的销毁。本文介绍一下使用智能指针来帮助我们实现相关的设计模…...

【设计模式】GOF概括

一、创建型模式&#xff08;5种&#xff09; 1. 单例模式 (Singleton) 适用场景&#xff1a;全局唯一实例&#xff08;如配置管理、日志工具&#xff09;。C示例&#xff1a;// 所谓的scott mayer单例模式 class Singleton { public:static Singleton& getInstance() {st…...

深入浅出限流算法(三):追求极致精确的滑动日志

在限流的世界里&#xff0c;精度往往是关键。我们已经讨论过固定窗口&#xff08;简单但有突刺&#xff09;和滑动窗口&#xff08;更平滑但仍有格子边界&#xff09;。如果我们需要更精确的控制&#xff0c;滑动日志 (Sliding Log) 算法便登场了。 核心思想&#xff1a;记录每…...

一文读懂Tomcat应用之 CentOS安装部署Tomcat服务

目录 一、Tomcat概述 (一)、Tomcat安装目录简介 (二)、Tomcat配置文件简介 1、server.xml文件 2、web.xml 3、context.xml 4、tomcat-users.xml 5、logging.properties 二、Tomcat安装部署 (一)、环境规划 (二)、安装JDK 1、下载JDK二进制安装包 2、解压JDK二进制…...

JVM 内存分配策略

引言 在 Java 虚拟机&#xff08;JVM&#xff09;中&#xff0c;内存分配与垃圾回收是影响程序性能的核心机制。内存分配的高效性直接决定了对象创建的速率&#xff0c;而垃圾回收策略则决定了内存的利用率以及系统的稳定性。为了在复杂多变的应用场景中实现高效的内存管理&am…...

轻松上手:使用 Docker Compose 部署 TiDB 的简易指南

作者&#xff1a;ShunWah 在运维管理领域&#xff0c;我拥有多年深厚的专业积累&#xff0c;兼具坚实的理论基础与广泛的实践经验。精通运维自动化流程&#xff0c;对于OceanBase、MySQL等多种数据库的部署与运维&#xff0c;具备从初始部署到后期维护的全链条管理能力。拥有Oc…...

Linux权限管理

权限的概念 在 Linux 系统里&#xff0c;权限管理是系统安全的关键环节。权限管理的核心目的是明确不同用户对文件和目录的操作许可范围&#xff0c;以此来保障系统资源的安全与合理使用。权限管理涉及三种不同的用户角色和三种基本的操作权限。 用户角色 所有者&#xff08…...

Crusader Kings III 王国风云 3(十字军之王 3) [DLC 解锁] [Steam] [Windows SteamOS macOS]

Crusader Kings III 王国风云 3&#xff08;十字军之王 3&#xff09; [DLC 解锁] [Steam] [Windows & SteamOS & macOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章&#xff0c;具体最新版本见下载文件说明&#xff1b; DLC 解锁列表&#xff08;仅供参考&am…...

架构风格对比

架构风格深度对比&#xff1a;从管道-过滤器到微内核 &#x1f4dc; 引言 在软件架构设计中&#xff0c;不同的架构风格适用于不同的业务场景。本文将深入解析 7种主流架构风格&#xff0c;包括它们的核心思想、优缺点、适用场景&#xff0c;并通过对比表格和示例帮助您选择最…...

V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows SteamOS]

V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows & SteamOS] 注意 这个符号表示 可打开折叠内容 需要有游戏正版基础本体&#xff0c;安装路径不能带有中文&#xff0c;或其它非常规拉丁字符&#xff1b;仅限用于自建服务器&#xff0c;并禁用 VAC &#xff01;&#xff0…...

HTML标记语言_@拉钩教育

目录 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个页面) 8.多媒体标签(音/视频) 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个…...

云原生开发革命:iVX 如何实现 “资源即插即用” 的弹性架构?

云原生技术正以惊人的速度重塑软件开发的版图。短短几年间&#xff0c;它从少数技术先驱的实验性方案&#xff0c;迅速崛起为全球企业数字化转型的核心驱动力。Gartner 预测&#xff0c;到 2026 年&#xff0c;全球 85% 的企业将全面采用云原生技术进行应用开发与部署。云原生架…...

whois为什么有时会返回两个不同的域名状态

前阵子发现一直想注册但被别人注册了的一个域名快要过期了&#xff0c;就想着写个脚本跑在电脑上&#xff0c;每分钟检查一次域名状态&#xff0c;一旦域名被正式删除&#xff0c;就发封邮件通知我&#xff0c;这样就不用频繁手动检查域名状态了。 写脚本时发现一个有趣的现象…...

跨境电商店铺矩阵布局:多账号运营理论到实操全解析

在当今竞争激烈的全球电商市场中&#xff0c;跨境电商店铺矩阵布局已成为卖家脱颖而出的关键策略。本文将深入剖析跨境电商店铺矩阵布局的本质、优势&#xff0c;并提供从理论到实操的全方位指导&#xff0c;助力您在全球市场中开启属于自己的销售新篇章。 一、是什么&#xff…...

安卓基础(强制转换)

​​一、强制转换&#xff08;Type Casting&#xff09;​​ ​​1. 什么是强制转换&#xff1f;​​ 当你想将一个类型的对象转换为另一个类型时&#xff0c;如果它们之间存在继承关系&#xff0c;就需要​​强制转换​​。 ​​注意​​&#xff1a;只有存在继承关系的类型…...

VS2022+OpenCasCade配置编译

一、Open CASCADE Technology介绍及安装&#xff08;windows10&#xff09; Open CASCADE Technology&#xff08;简称OCCT&#xff09;是一款开源的 3D CAD/CAM/CAE 软件开发平台&#xff0c;广泛应用于工业设计、工程仿真、制造等领域。开源OCC对象库是一个面向对象C类库&…...

AIGC重构元宇宙:从内容生成到沉浸式体验的技术革命

1. 引言 当数字技术掀开人类交互的新篇章&#xff0c;元宇宙正从科幻构想蜕变为现实——这个由虚拟与现实交织的数字宇宙&#xff0c;承载着未来社会的娱乐、工作与社交形态。作为核心赋能技术&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;正以惊人的创造力&…...

当所有人都用上先进ai,如何保持你的优势?

这不再是你能用上openai模型别人只能用文心一言的时候&#xff0c;而是每个人都可以免费用deepseek r1的时代。如今&#xff0c;办公室里每个人都能随时调用deepseek模型&#xff0c;喊一声“帮我写段代码”便轻松解决问题。在这种情况下&#xff0c;单纯“会用AI”已经很难再形…...

【浙江大学DeepSeek公开课】人类经验与AI算法的镜像之旅

人类经验与AI算法的镜像之旅 人类经验与 AI 算法的镜像之旅一、语言的奥秘&#xff1a;人类如何解码世界二、从符号到智能&#xff1a;AI 的语言理解之路三、DeepSeek - V3&#xff1a;大语言模型的构建与进化四、DeepSeek - R1&#xff1a;推理模型的诞生与突破五、智能体时代…...

【前端】从零开始的搭建顺序指南(技术栈:Node.js + Express + MongoDB + React)book-management

项目路径总结 后端结构 server/ ├── controllers/ # 业务逻辑 │ ├── authController.js │ ├── bookController.js │ ├── genreController.js │ └── userController.js ├── middleware/ # 中间件 │ ├── authMiddleware…...

探针台维护方法

探针台的维护直接影响其测试精度与使用寿命&#xff0c;需结合日常清洁、环境控制、定期校准等多维度操作&#xff0c;具体方法如下&#xff1a; 一、日常清洁与保养 1.‌表面清洁‌ 使用无尘布或软布擦拭探针台表面&#xff0c;避免残留清洁剂或硬物划伤精密部件。探针头清…...

js day8

事件绑定 事件&#xff1a;发生在html元素上的特定动作&#xff0c;鼠标点击&#xff0c;键盘按下&#xff0c;鼠标移入 事件三要素&#xff1a;事件源&#xff08;触发事件的元素&#xff09; 事件类型&#xff0c;事件触发后执行的函数 通过html触发事件&#xff08;不建议…...

大模型训练平台:重构 AI 研发范式的智慧基建

当 AI 研发陷入“高耗低效”困局&#xff0c;如何破局&#xff1f; 在大模型技术爆发的今天&#xff0c;企业 AI 研发正面临前所未有的挑战&#xff1a;某金融机构为训练风控模型投入大量算力&#xff0c;却因数据标注耗时半年延误项目&#xff1b;某制造企业搭建的训练集群利…...

vuex刷新数据丢失解决方案-vuex-persist

安装 npm install -S vuex-persist&#xff08;yarn add vuex-persist&#xff09; 使用&#xff1a; /store/index.js引入vuex-persist配置&#xff1a; import Vue from vue import Vuex from vuex import VuexPersistence from vuex-persist import user from ./modules/use…...

多模态革命!拆解夸克AI相机技术架构:如何用视觉搜索重构信息交互?(附开源方案对比)

一、技术人必看&#xff1a;视觉搜索背后的多模态架构设计 夸克「拍照问夸克」功能绝非简单的OCRQA拼接&#xff0c;而是一套多模态感知-推理-生成全链路系统&#xff0c;其技术栈值得开发者深挖&#xff1a; 视觉编码器&#xff1a;基于Swin Transformer V2&#xff0c;支持4…...

Python依据卫星TLE轨道根数,计算可见时间窗口

1.卫星TLE数据 概括&#xff1a;两行字符串表示的卫星参数 字段 字符串位置&#xff08;以0为起点&#xff09; 描述内容注释1 01–01卫星编号203-07卫星类别卫星类别&#xff08;U表示不保密&#xff0c;可供公众使用的&#xff1b;C 表示保密&#xff0c;仅限NORAD使用&…...

C++?模板!!!

一、引言 在之前我们一起学习了C中类和对象、动态内存管理等相关知识&#xff0c;今天我们将一起学习C中有关模板的相关知识&#xff0c;学完模板之后我们就可以进入C中非常重要的库---STL了&#xff0c;那么模板究竟有什么奥秘呢&#xff1f;让我们一起来看看吧&#xff01; …...

web技术与nginx网站服务

一、Web服务基础概念 Web服务器核心功能 通过HTTP/HTTPS协议提供网页内容&#xff0c;支持HTML、CSS、JavaScript等静态资源&#xff0c;动态内容需结合后端语言&#xff08;如PHP、Python&#xff09;处理36。常用软件&#xff1a;Nginx、Apache、Lighttpd。Nginx以高并发、低…...

关系数据的可视化

目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 一、安装Python所需要的第三方模块 二、实验 【实验总结】 【实验目的】 1.掌握关系数据在大数据中的应用 2.掌握关系数据可视化方法 3. python 程序实现图表 【实验原理】 在传统的观念里面&#xff0…...

MATLAB小试牛刀系列(1)

问题描述 某机床厂生产甲、乙两种机床&#xff0c;每台机床销售后的利润分别为 4 千元与 3 千元。生产甲机床需用 A、B 机器加工&#xff0c;加工时间分别为每台 2h 和每台 1h&#xff1b;生产乙机床需用 A、B、C 三种机器加工&#xff0c;加工时间均为每台 1h。若每天可用于加…...

CUDA、pytorch、配置环境教程合集

1.CUDA卸载 参考&#xff1a; 【环境搭建】卸载&重新安装cudacudnnanacondagpu版pytorch_卸载cuda-CSDN博客 【cuda】cuda安装与卸载升级_升级cuda-CSDN博客 检测代码&#xff1a; https://www.zhihu.com/question/482335084 import torch print(CUDA版本:,torch.vers…...

代码随想录打卡|Day29 动态规划Part02(不同路径、不同路径2、整数拆分、不同的二叉树搜索)

动态规划Part02 不同路径 力扣题目链接 代码随想录链接 视频讲解链接 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xf…...

Leetcode刷题 | Day49_图论01

一、学习任务 深度优先搜索理论基础深度优先搜索理论基础 | 代码随想录98. 所有可达路径(ACM)797. 所有可能的路径(Leetcode)广度优先搜索理论基础 二、具体题目 1.深度优先搜索理论基础 类似回溯算法&#xff0c;二叉树的前中后序遍历是其在二叉树领域的应用。 代码框架&am…...

if consteval

if consteval 是 C23 引入的新特性&#xff0c;该特性是关于immediate function 的&#xff0c;即consteval function。用于在编译时检查当前是否处于 立即函数上下文&#xff08;即常量求值环境&#xff09;&#xff0c;并根据结果选择执行不同的代码路径。它是对 std::is_con…...

【iOS】OC源码阅读——alloc源码分析

文章目录 前言基本调试方法allocalloc函数逐步调试空类检查快速路径&#xff1a;默认内存分配慢速路径&#xff1a;自定义内存分配slowpath和fastpath alloc核心操作cls->instanceSize&#xff1a;计算所需内存大小内存字节对齐原则为什么要16字节对齐内存字节对齐总结 其他…...

[JavaScript]对象关联风格与行为委托模式

对象关联. “[[prototype)]的机制就是存在于对象中的一个内部链接,它会引用其它对象” 为何创建原型链(关联)? Object.create()会创建一个新对象,参数对象会作为新对象的__proto__. “我们并不需要类来创建两个对象之间的关系,只需要通过委托来关联对象就足够了.而Object.c…...

在 Ubuntu 24.04 LTS 一台机子上同时部署Dify 1.3.1 和 RAGflow 0.18.0

一、RAGflow 0.18.0 简介 有关 Dify 的简介&#xff0c;可以查看我之前分享的 《在 Ubuntu24.04 LTS 上 Docker Compose 部署 Dify 社区版 1.0.1》文章。RAGFlow是一款基于深度文档理解&#xff08;deepdoc&#xff09;构建的开源 RAG引擎。其中&#xff0c;深度文档理解&#…...

小熊派BearPi-Pico H3863(二)环境配置 Ubuntu编译源码与VSCode远程开发指南

BearPi-H3863 Ubuntu编译源码与VSCode远程开发指南 摘要开发环境配置方案选型环境部署实战手册一、基础环境配置1. 镜像准备2. 虚拟机初始化3. 网络异常处理 二、VSCode远程开发配置1. SSH服务验证2. VSCode插件安装3. 远程连接实战4. 项目管理 关键要点总结 摘要 本文针对Bea…...

组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)

首发日期 2025-04-26, 以下为原文内容: 家里的 PC 主机比较多, 如果同时开机, 显示器就不够用了. 因为穷, 窝租住的房间又很小, 放不下很多显示器. 所以, 窝希望买一台支持 分屏 功能的显示器. 最好是 4K 分辨率 (3840x2160) 的屏幕, 然后 4 分屏 (有 4 个 DP 或 HDMI 输入接口…...

SwiftUI 8.List介绍和使用

SwiftUI 的 List 组件用于展示可滚动的内容集合&#xff0c;支持静态或动态数据、交互操作&#xff08;如点击、滑动删除&#xff09;、分组、自定义样式等。以下是其详细介绍及使用方法&#xff1a; 一、基本用法 1. 静态列表 直接声明固定内容&#xff1a; struct Content…...