系统设计题-简易数据库系统

一、设计一个简易数据库系统,包含create,insert,select三个指令。

create(int tableId,int colNum,String key):创建表,其id为tableId,如果该表已存在,则不做任何处理。colNum为表中列的数量,列名由a-z字母组成,并按a-z顺序编号。比如colNum=3,则代表列分别为a,b,c。
key为主键(指1列或多列组合),key中每个字符代表一列,如key=bc,表示主键由列b和列c组合。
insert(int tableId,int[] values):添加一条记录。values每个元素按照顺序一一对应每列的值。如果主键冲突,则不做任何处理。
select(int tableId,String[] conditions):根据条件查询记录,并按照主键升序输出结果。其中condition仅为等于条件,比如b=32。
主键升序指的是按照keys中列出现的顺序依次进行排序,每列按值大小升序输出。如keys=ba,则先按照b列升序排序,如果b列值相同,则再按照a列升序排序。

样例
create:1,3,a
insert:1,2 3 7
insert:1,4 5 6
insert:1,3 4 6
select:1, b=5 and c=6
输出
4 5 6

二、算法实现

 // 存放tableId和对应的值Map<Integer, List<int[]>> tables = new HashMap<>();// 存放tableId和主键Map<Integer, String> tableKey = new HashMap<>();// 存放主键对应的值,用于校验是否有冲突Set<String> id = new HashSet<>();// 创建private void create(int tableId, int colNum, String keys) {if (!tables.containsKey(tableId)) {tables.put(tableId, new ArrayList<>());tableKey.put(tableId, keys);}}// 插入private void inset(int tableId, int[] values) {String keys = tableKey.get(tableId);char[] charArray = keys.toCharArray();StringBuilder sb = new StringBuilder();for (char c : charArray) {sb.append(values[c - 'a']).append(";");}sb.append(tableId);if (!id.contains(sb.toString())) {id.add(sb.toString());tables.get(tableId).add(values);}}// 查询private List<int[]> select(int tableId, String[] conditions) {List<int[]> datas = tables.get(tableId);Map<Character, Integer> map = new HashMap<>();for (String condition : conditions) {String[] split = condition.split("=");map.put(split[0].charAt(0), Integer.valueOf(split[1]));}List<int[]> result = new ArrayList<>();for (int[] data : datas) {boolean match = true;for (Character c : map.keySet()) {int index = c - 'a';if (data[index] != map.get(c)) {match = false;break;}}if (match) {result.add(data);}}sortData(result, tableKey.get(tableId));return result;}// 对主键升序排序private void sortData(List<int[]> result, String key) {result.sort((o1, o2) -> {char[] charArray = key.toCharArray();for (char c : charArray) {int index = c - 'a';if (o1[index] != o2[index]) {return o1[index] - o2[index];}}return 0;});}

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

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

相关文章

洛谷 P3008 [USACO11JAN] Roads and Planes G

题意 有一张 n n n 点 ( m 1 m 2 ) (m_1m_2) (m1​m2​) 边的无向图&#xff0c;其中 m 1 m_1 m1​ 条为无向边&#xff0c;另外 m 2 m_2 m2​ 条为有向边&#xff0c; 无向边的边权可以为负。求 s s s 到其他每个点的最短路。 思路 使用 SPFA 会 T 掉一两个点&#x…

第10章:网络与信息安全

目录 第10章&#xff1a;网络与信息安全 网络概述 计算机网络概念 计算机网络的分类 网络的拓扑结构 ISO/OSI网络体系结构 网络互联硬件 物理层互联设备 数据链路层互联设备 网络层互联设备 应用层互联设备 网络的协议与标准 网络标准 TCP/IP协议族 网络接口层协…

GCC扩展功能、函数,预处理命令

文章目录 前言一、GCC C语言扩展声明函数属性变量属性内敛汇编与原子操作相关的内建函数内存模型感知原子操作的内置函数使用溢出检查执行算术的内置函数 - xxx 二、GCC C语言扩展interface和 pragmasTemplate 二、预处理过程及其指令预处理过程1. 字符集转换2. Initial proces…

实现基于Spring Cloud的事件驱动微服务

实现基于Spring Cloud的事件驱动微服务 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 事件驱动架构在现代微服务架构中越来越受欢迎&#xff0c;它通过事件的…

【JAVA多线程】线程池概论

目录 1.概述 2.ThreadPoolExector 2.1.参数 2.2.新任务提交流程 2.3.拒绝策略 2.4.代码示例 1.概述 线程池的核心&#xff1a; 线程池的实现原理是个标准的生产消费者模型&#xff0c;调用方不停向线程池中写数据&#xff0c;线程池中的线程组不停从队列中取任务。 实现…

最新版Python安装教程

一、安装Python 1.下载Python 访问Python官网&#xff1a; https:/www.oython.orgl 点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS./Linux等) 选择下载最新稳定版本的Python 以下内容以演示安装Windows操作系统64位的python 左边是稳定发布版本Stabl…

python网络编程-TCP/IP

链路层 帧组成&#xff08;按顺序&#xff09;&#xff1a; 目标MAC&#xff1a;6B 源MAC&#xff1a;6B 类型&#xff1a;2B 数据&#xff1a;46B-1500B CRC&#xff1a;4B 其中&#xff0c;源MAC为主机网卡地址&#xff0c;类型为来源网络层的数据类型&#xff0c;ipv…

Self-Instruct构造Prompt的例子

人工构造一批Prompt做种子。&#xff08;Starting with a small seed set of human-written tasks&#xff09;每次把一些种子后来生成的Prompt&#xff0c;放到Input里做few-shot examples&#xff0c;用LLM生成更多的Prompt&#xff1b;&#xff08;Using the LLM to generat…

PyTorch学习之torch.transpose函数

PyTorch学习之torch.transpose函数 一、简介 torch.transpose 函数我们用于交换张量的维度。 二、语法 torch.transpose 函数用于交换给定张量的两个维度&#xff0c;其语法如下&#xff1a; torch.transpose(input, dim0, dim1)三、参数 input&#xff1a;待交换维度的张…

kotlin 基础

文章目录 1、安装 Java 和 Kotlin 环境2、程序代码基本结构3、变量的声明与使用4、数据类型5、数字类型的运算1&#xff09;布尔类型2&#xff09;字符类型3&#xff09;字符串类型 6、 选择结构1)&#xff08;if - else&#xff09;2&#xff09; 选择结构&#xff08;when&am…

useImperativeHandle浅谈

useImperativeHandle 是 React Hooks 提供的一个高级功能&#xff0c;它允许你在函数式组件中自定义并暴露特定的实例值或方法给父组件。主要的作用是&#xff1a; 自定义对外暴露的实例值或方法: 通常情况下&#xff0c;函数式组件内部的实例值或方法对外是不可见的&#xff0…

如何有效管理你的Facebook时间线?

Facebook作为全球最大的社交平台之一&#xff0c;每天都有大量的信息和内容在用户的时间线上展示。有效管理你的Facebook时间线&#xff0c;不仅可以提升用户体验&#xff0c;还能够帮助你更好地控制信息流和社交互动。本文将探讨多种方法和技巧&#xff0c;帮助你有效管理个人…

分班结果老师怎么发给家长?

分班结果老师怎么发给家长&#xff1f; 随着新学期的脚步渐近&#xff0c;老师们的工作也变得愈发繁忙。从准备教学计划到整理课程材料&#xff0c;每一项任务都不容小觑。而其中&#xff0c;分班结果的告知工作&#xff0c;更是让不少老师头疼不已。传统的分班通知方式&#…

7、Redis主从复制过程

Redis主从复制过程 ​ 当一个Redis节点&#xff08;Slave节点&#xff09;接受到类似slaveof 127.0.0.1 6380的指令直到其可以从master持续复制数据&#xff0c;大致经历如下过程&#xff1a; 1、保存master地址 ​ 当slave接收到slaveof命令后&#xff0c;slave会立即将新的…

Python爬虫与数据可视化:构建完整的数据采集与分析流程

Python爬虫技术概述 Python爬虫是一种自动化的数据采集工具&#xff0c;它可以模拟浏览器行为&#xff0c;访问网页并提取所需信息。Python爬虫的实现通常涉及以下几个步骤&#xff1a; 发送网页请求&#xff1a;使用requests库向目标网站发送HTTP请求。获取网页内容&#xf…

.gitignore 的奥秘:前端开发者必须了解的文件忽略规则(二).gitignore 匹配规则

.gitignore 匹配规则 Git 版本管理在开发中场景&#xff0c;其中.gitignore也是Git中必不可少的配置文件&#xff0c;.gitignore 文件用于告诉 Git 哪些文件或目录应该被忽略&#xff0c;即不被版本控制系统跟踪和提交。 系列文章&#xff0c;上一篇介绍了&#xff1a;.gitigno…

Python 如何批量压缩PDF文件或减小PDF文件大小

目录 安装Python PDF库 Python通过压缩图片来减小PDF文件大小 Python通过压缩字体或取消嵌入字体来减小PDF文件大小 Python通过删除不必要的内容如附件、注释或表单来减小PDF文件大小 总结 PDF文件凭借其平台无关性和便携性&#xff0c;已经成为日常办公和信息共享的首选格…

15集终于编译成功了-了个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》

15集终于编译成功了-个球&#xff01;编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》 还是参考这个官方文档&#xff1a; https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2 全是干货&#xff01; 这里面提到的这个Micro工程已经移开了&#xff1…

【微服务】springboot对接Prometheus指标监控使用详解

目录 一、前言 二、微服务监控概述 2.1 微服务常用监控指标 2.2 微服务常用指标监控工具 2.3 微服务使用Prometheus监控优势 三、环境准备 3.1 部署Prometheus服务 3.2 部署Grafana 服务 3.3 提前搭建springboot工程 3.3.1 引入基础依赖 3.3.2 配置Actuator 端点 3.…

【Linux】信号的处理

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 信号的处理 1 信号的处理2 内核态 VS 用户态3 键盘输入数据的过程4 如何理解OS如何正常的运行5 如何进行信号捕捉信号处理的总结6 可重入函数volatile关…