自定义有序Map

package cn.ziqirj.common.utils;import lombok.Getter;
import lombok.Setter;import java.util.ArrayList;
import java.util.List;/*** 模拟Map集合,key不可重复,按插入顺序排序* @author zhangji** @param <T>*/
public class CustomOrderlyMap<T> {@Getterprivate List<String> keys = new ArrayList<>();@Getterprivate List<T> values = new ArrayList<>();private List<map<T>> kv = new ArrayList<>();public CustomOrderlyMap() {}/*** 添加元素* @param key 键* @param value	值*/public void add(String key, T value) {Integer index = getIndex(key);if(null != index && index != -1) {values.set(index, value);kv.get(index).setValue(value);return ;}keys.add(key);values.add(value);kv.add(new map<T>(key, value));}/*** 批量添加元素* @param customMap 集合*/public void addAll(CustomOrderlyMap<T> customMap) {if(null == customMap || customMap.size() == 0) {return ;}List<map<T>> kvl = customMap.kv;for(map<T> map : kvl) {this.add(map.getKey(), map.getValue());}}/*** 移除元素* @param key 键*/public void remove(String key) {Integer index = getIndex(key);if(null == index || index == -1 ) {return ;}keys.remove(index);values.remove(index);kv.remove(index);}/*** 移除元素* @param obj 值*/public void remove(T obj) {Integer index = getIndex(obj);if(null == index || index == -1 ) {return ;}keys.remove(index);values.remove(index);kv.remove(index);}/*** 清空集合*/public void removeAll() {this.keys = new ArrayList<>();this.values = new ArrayList<>();this.kv = new ArrayList<>();}/*** 关闭集合*/public void close() {this.keys.clear();this.values.clear();this.kv.clear();}/*** 设置元素* @param key 键* @param value 值*/public void set(String key, T value) {Integer index = getIndex(key);if(null == index || index.intValue() == -1)return ;values.set(index, value);kv.get(index).setValue(value);}/*** 获取元素* @param key 键* @return T*/public T get(String key) {Integer index = getIndex(key);if (null == index || index == -1)return null;return kv.get(index).getValue();}/*** 获取集合大小* @return Integer*/public Integer size() {return this.kv.size();}/*** 判断集合是否为空* @return boolean*/public boolean isEmpty() {return this.kv.isEmpty();}/*** 打印集合*/public void print() {if(isEmpty()) {System.out.println("null");}System.out.print("CustomMap : [");for(map<T> m : this.kv) {System.out.print(m.toString());}System.out.println("]");}/*** 获取key的索引* @param key 键* @return Integer*/private Integer getIndex(String key) {int length = this.keys.size();if (length == 0) {return -1;}for (int i = 0; i < length; i++) {if (key.equals(keys.get(i))) {return i;}}return null;}/*** 获取value的索引* @param t 值* @return Integer*/private Integer getIndex(T t) {int length = this.values.size();if (length == 0) {return -1;}for (int i = 0; i < length; i++) {if (t.equals(values.get(i))) {return i;}}return null;}}@Setter
@Getter
class map<T> {private String key;private T value;public map(String key, T value) {super();this.key = key;this.value = value;}@Overridepublic String toString() {return "[K:" + key + " --> V:" + value + "]";}}

个人博客:紫琪软件工作室

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

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

相关文章

matlab中高精度计算函数vpa与非厄米矩阵本征值的求解

clear;clc;close all tic %并行设置% delete(gcp(nocreate));%关闭之前的并行 cparcluster(local); c.NumWorkers50;%手动设置线程数(否则默认最大线程为12) parpool(c, c.NumWorkers); %并行设置%w1; u2.5;N30;valstozeros(2*N2,100); v10linspace(-3,3,100).;parfor jj1:leng…

机器人领域的一些仿真器

模拟工具和环境对于开发、测试和验证可变形物体操作策略至关重要。这些工具提供了一个受控的虚拟环境&#xff0c;用于评估各种算法和模型的性能&#xff0c;并生成用于训练和测试数据驱动模型的合成数据。 Bullet Physics Library 用于可变形物体模拟的一个流行的物理引擎是 B…

【玩转23种Java设计模式】行为型模式篇:备忘录模式

软件设计模式&#xff08;Design pattern&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…

GraphRAG vs 传统 RAG:如何通过知识图谱提升 AI 检索能力

相比传统 RAG 仅能独立检索文本片段的局限性&#xff0c;GraphRAG通过构建实体关系图谱实现了信息间的连接&#xff0c;让 AI 能更完整地理解和检索复杂的关联信息&#xff0c;从而生成更准确和连贯的回答 问题背景: 想象有一本详细记录某人(X)成就的传记,每个章节都描述了他的…

【小制作】米家模拟手指点击

代码功能解释 这段代码是一个基于Arduino平台的控制程序&#xff0c;主要功能包括&#xff1a; 初始化&#xff1a;设置引脚模式、初始化编码器、舵机和EEPROM。按键检测&#xff1a;处理按钮的单击、双击和长按事件&#xff0c;并根据事件执行相应操作。编码器更新&#xff…

23. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--预算

在每个月发工资后很多人会对未来一个月的花销进行大致的计划&#xff0c;这个行为叫做预算。那么在这篇文章中我们将一起开发预算服务。 一、需求 预算需求就是简单的增删改查&#xff0c;虽然比较简单&#xff0c;但是也有几点需要注意。 编号需求说明1新增预算1. 针对每种…

Pentaho Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!

一、问题说明 在使用 Kettle 将 DB2 数据迁移到 Oracle 的过程中&#xff0c;出现了 DB2 中为空字符串的字段&#xff0c;在插入到 Oracle 过程中实际插入的为 NULL &#xff0c;导致触发了非空校验而迁移失败 空字符串 ‘’ &#xff0c;即长度为0的字符串 搜索该问题后得知…

2025-01-04 Unity插件 YodaSheet1 —— 插件介绍

文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 ​ Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器&#xff0c;可以轻松地在 Unity 编辑器中 编辑&#xff0c;搜索&#xf…

51单片机——LED模块

LED模块中有8盏灯&#xff0c;从左到右为D1&#xff0c;D2&#xff0c;...&#xff0c;D8 8盏灯以二进制存储在单片机中&#xff0c;它们共同组成一个二进制 0 0 0 0 0 0 0 0 ---------------------------------------------- D8 D7 D6 D5 D…

VScode 格式化代码空格记录

点击 -> “文件” -> “首选项" -> “设置” -> 按下图操作&#xff1a; 怎么格式化代码空格&#xff0c;先看下&#xff1a; 保存代码后&#xff0c;这代码自动格式化发&#xff0c;如下图&#xff1a; 你可以试试看就即可

苹果系统MacOS下ObjectC建立的App程序访问opencv加载图片程序

前言 苹果系统下使用opencv感觉还是有些不太方便&#xff0c;总是感觉有点受到限制。本博客描述的是在MacOS下建立App程序然后调用opencv显示图片时出现的一些问题并最后解决的一个过程。 一、程序的建立 选择程序的类型&#xff1a; 选择界面模式和编程语言&#xff1a; 其余…

LeetCode--复原IP地址(面试手撕算法高频题)

题目描述:有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.…

CSS3——3. 书写格式二

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写&#xff1a;--><!--1. 属性名:属性值--><!--2.属性值是对属性的相关描述--><!--3.属性名必须是…

windows配置jdk

进入此网址 JDK 11 Releases 找到11版本进行下载 下载好后配置环境变量 按windows加r键输入sysdm.cpl点击确定 在系统变量里新建输入 JAVA_HOME D:\openjdk-1128_windows-x64_bin\jdk-11 //变量值为安装jidk的路径 配置path环境变量 编辑path变量输入%JAVA_HOME%\bin并放置最…

深入刨析数据结构之排序(下)

目录 1.内部排序 1.5选择排序 1.5.1简单选择排序 1.5.2树形选择排序 1.6堆排序 1.7归并排序 1.7.1递归归并 1.7.2非递归归并 1.8计数排序 1.9基数排序 常见内部排序的总结&#xff1a; 1.内部排序 1.5选择排序 选择排序&#xff08;Selection Sort&#xff09;的基…

RocketMQ场景问题

1.消息丢失 有这么一个场景&#xff0c;就是订单支付完成之后&#xff0c;订单系统会进行发送消息给RocketMQ集群&#xff0c;下游会有积分系统进行监听这个消息&#xff0c;进行消费然后给用户发放积分。在下面的这个场景中&#xff0c;通过查询日志发现了订单系统发送订单支付…

openwrt host方式编译ffmpeg尝试及问题分析

openwrt host方式编译ffmpeg尝试及问题分析 configure错误分析编译错误一: ERROR: gnutls not found using pkg-config编译错误2: ERROR: libdrm not found using pkg-config编译错误3: ERROR: libmp3lame >= 3.98.3 not found编译错误4: ERROR: x264 not found using pkg…

springboot优先级和ThreadLocal

什么是ThreadLocal 定义&#xff1a;ThreadLocal 是线程的局部变量&#xff0c;为每个线程提供单独一份存储空间&#xff0c;具有线程隔离的效果。特点&#xff1a;不同的线程之间不会相互干扰。 ThreadLocal的应用场景 数据共享&#xff1a;在同一个线程或同一个请求中进行…

cordova项目环境搭建 hello

环境准备&#xff1a; 1.下载nodejs并安装配置。 直接官网下载最新版本。此次我是下载的 Node.js v22.12.0。 1.1安装好后配置镜像。 输入&#xff1a;node -v // 显示node.js版本 npm -v // 显示npm版本 1.2环境配置 &#xff08;1&#xff09;找到安装的目录&am…

LE Audio 初探

LE Audio 架构 一.LE Audio profile框架 profile初识&#xff1a; BAP&#xff1a; BAP通常在手机端实现&#xff0c;它允许配置编解码器&#xff0c;配置QoS(质量服务)&#xff0c;控制流媒体&#xff0c; PACS&#xff1a; Published Audio Capabilities Service&#xff0c;…