系統設計題-簡易數據庫系統

一、設計一個簡易數據庫系統,包含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.pswp.cn/diannao/42411.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42411.shtml
英文地址,請注明出處:http://en.pswp.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關…