设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。 getRandom():等概率随机返

Posted liuwentao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。 getRandom():等概率随机返相关的知识,希望对你有一定的参考价值。

解题思路:
创建hashmap,一个存K,数字,另一个存数字,K,每当插入元素时,将元素非别对应插入两个hashmap中
目的是能够方变随机查找。
public class RandomPool {
public static class Pool<K>{
private HashMap<K,Integer> keyIndexMap;
private HashMap<Integer,K> indexKeyMap;
private int size;
public Pool(){
keyIndexMap = new HashMap<>();
indexKeyMap = new HashMap<>();
size = 0;
}
public void insert(K key){
if(!keyIndexMap.containsKey(key)){
keyIndexMap.put(key,size);
indexKeyMap.put(size++,key);
}

}
// A 0 0 A
// B 1 1 B
//C 2 2 C
//D 3 3 D
//先确定删除的索引,以及最后面的值,把最后面的值补充到删除的地方
//之后删除开始应该删除的
public void delete(K key){
if(keyIndexMap.containsKey(key)){
int deleteIndex = keyIndexMap.get(key);
int lastIndex = --size;
K lastKey = indexKeyMap.get(lastIndex);
keyIndexMap.put(lastKey,deleteIndex);
indexKeyMap.put(deleteIndex,lastKey);
keyIndexMap.remove(key);
indexKeyMap.remove(lastIndex);
}
}
public K random(){
if(size==0){
return null;
}
int num = (int) (Math.random()*size);
return indexKeyMap.get(num);
}
}
}
总结:多积累。













































以上是关于设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。 getRandom():等概率随机返的主要内容,如果未能解决你的问题,请参考以下文章

案例分析:设计模式与代码的结构特性

hive的Hive 体系结构

设计模式的征途—16.访问者(Visitor)模式

案例分析:设计模式与代码的结构特性

什么是OOP

微服务架构总览