设计 SQL
难度:
标签:
题目描述
代码结果
运行时间: 107 ms, 内存: 28.8 MB
/*
* LeetCode 2408: Design SQL
* This problem involves designing a SQL-like interface with basic functionalities using Java Stream API.
* We will implement a basic class with methods to perform operations like inserting rows, deleting rows, and querying rows based on certain conditions using streams.
*/
import java.util.*;
import java.util.stream.Collectors;
class SQLStream {
private List<Map<String, String>> table;
private Set<String> columns;
public SQLStream() {
this.table = new ArrayList<>();
this.columns = new HashSet<>();
}
public void createTable(String[] columns) {
this.columns.addAll(Arrays.asList(columns));
}
public void insertRow(Map<String, String> row) {
if (row.keySet().equals(columns)) {
table.add(row);
} else {
throw new IllegalArgumentException("Row does not match table columns");
}
}
public void deleteRow(String column, String value) {
table = table.stream()
.filter(row -> !row.get(column).equals(value))
.collect(Collectors.toList());
}
public List<Map<String, String>> queryTable(String column, String value) {
return table.stream()
.filter(row -> row.get(column).equals(value))
.collect(Collectors.toList());
}
}
// Example usage:
// SQLStream sql = new SQLStream();
// sql.createTable(new String[]{"id", "name", "age"});
// sql.insertRow(Map.of("id", "1", "name", "John", "age", "30"));
// sql.insertRow(Map.of("id", "2", "name", "Jane", "age", "25"));
// sql.deleteRow("id", "1");
// List<Map<String, String>> results = sql.queryTable("age", "25");
解释
方法:
这个题解通过模拟一个简单的数据库来存储和管理数据行。每一个SQL对象可以管理多个表格,其中每个表格由一个名称标识。使用两个主要的数据结构:一个字典来记录每个表的行ID种子(自增的行ID),另一个嵌套字典来存储表格数据,其中外层字典的键是表名,内层字典的键是行ID,值是对应的行数据(列表形式)。'insertRow'方法用于在指定的表中插入新行,并自动分配行ID;'deleteRow'方法用于删除指定表的指定行;'selectCell'方法用于获取特定表、行和列的单元格数据。
时间复杂度:
O(1)
空间复杂度:
O(N + M)
代码细节讲解
🦆
在设计这个SQL模拟类时,为什么选择使用字典来存储表和行数据,而不是选择其他数据结构如列表或树形结构?
▷🦆
在'insertRow'方法中,行ID是自增的,这种设计有没有考虑到并发插入的情况下行ID的唯一性和安全性?
▷🦆
你的删除操作`deleteRow`是如何确保删除的行ID确实存在于表中,如果行ID不存在会怎么处理?
▷🦆
在'insertRow'和'deleteRow'方法中,如果指定的表名不存在,这种情况下你的实现会如何处理?
▷