// 定义一个RandomizedSet类,用于实现随机集合的功能
class RandomizedSet {
// nums列表用于存储集合中的元素
List<Integer> nums;
// indices映射用于存储元素值到其在nums列表中的索引的映射
Map<Integer, Integer> indices;
// random对象用于生成随机数
Random random;
// 构造函数,初始化nums、indices和random
public RandomizedSet() {
nums = new ArrayList<Integer>(); // 初始化nums为空列表
indices = new HashMap<Integer, Integer>(); // 初始化indices为空映射
random = new Random(); // 初始化random对象
}
// 插入元素的方法
public boolean insert(int val) {
if (indices.containsKey(val)) { // 如果元素已存在,返回false
return false;
}
int index= nums.size(); // 获取当前nums的大小作为新元素的索引
nums.add(val); // 将元素添加到nums列表末尾
indices.put(val, index); // 更新indices映射,将元素值映射到其索引
return true; // 插入成功,返回true
}
// 删除元素的方法
public boolean remove(int val) {
if (!indices.containsKey(val)) { // 如果元素不存在,返回false
return false;
}
int index = indices.get(val); // 获取要删除元素的索引
int last = nums.get(nums.size() - 1); // 获取nums列表最后一个元素
nums.set(index, last); // 将最后一个元素放到要删除元素的位置
indices.put(last, index); // 更新indices映射,将最后一个元素的索引映射到被删除元素的位置
nums.remove(nums.size() - 1); // 从nums列表中移除最后一个元素
indices.remove(val); // 从indices映射中移除被删除元素的映射关系
return true; // 删除成功,返回true
}
// 获取随机元素的方法
public int getRandom() {
int randomIndex = random.nextInt(nums.size()); // 生成一个随机索引
return nums.get(randomIndex); // 返回对应索引位置的元素
}
}