所以我试图创建一个基于AVL树和哈希表的智能数据结构。
我确定我需要先检查数据类型将具有哪种实现,具体取决于列表的大小。
例如,如果我有一个大小为1000的列表n,它将使用哈希表实现。对于超过1000的任何内容,使用AVL树。
此代码:
public class SmartULS<K,V> {
protected TreeMap<K,V> tree = new TreeMap<>();
protected AbstractHashMap<K,V> hashMap = new AbstractHashMap<K,V>();
public void setSmartThresholdULS(size){
int threshold = 1000;
if (size >= threshold) {
map = new AbtractMap<K,V>();
}
else
map = new TreeMap<K,V>();
}
}
在此之后,我应该编写标准方法,例如
获取(SmartULS,Key),添加(SmartULS,Key,Value),删除(SmartULS,Key),nextKey(Key),previousKey(Key)等。
我真的迷失了如何开始这个?我已经考虑过像这样创建这些方法(用伪写的):
Algorithm add(SmartULS, Key, Value):
i<- 0
If SmartULS instanceof AbstractHashMap then
For i to SmartULS.size do
If Key equals to SmartULS[i] then
SmartULS.get(Key).setValue(Value)
Else
SmartULS.add(Key, Value)
Else if SmartULS instanceof TreeMap then
Entry newAdd equals new MapEntry(Key, Value)
Position<Entry> p = treeSearch(root( ), Key)
答案 0 :(得分:0)
您正确地走上了正确的轨道,这就是我理解您的问题并实施它的方式:
<!DOCTYPE html>
<html>
<head lang="en">
<title>Testing Code</title>
</head>
<textarea id="priority1" name="priority1"></textarea>
<select id="strategy1" name="strategy1">
<option value=""></option>
<option value="Line one">Line one</option>
<option value="Line two">Line Two</option>
<option value="Line three">Line Three</option>
</select>
<body>
<script type="text/javascript">
var myOption = document.getElementById('priority1');
var myStrategy = document.getElementById('strategy1');
myStrategy.onchange = function () {
myOption.value = this.value;
}
</script>
</body>
</html>
根据给定的初始大小,构造函数决定是否初始化哈希表或树。我还添加了get,put和remove函数,并使用了Map的接口函数。
我不明白nextKey和previousKey函数假设要做什么或返回什么,所以无法帮助那里。
使用该类的方法如下:
public class SmartULS<K, V> {
Map<K,V> map;
public static final int THRESHOLD = 1000;
public SmartULS(int size) {
if(size < THRESHOLD) {
map = new HashMap();
} else {
map = new TreeMap();
}
}
public V get(K key) {
return map.get(key);
}
public V put(K key, V value) {
return map.put(key, value);
}
public V remove(K key) {
return map.remove(key);
}
}
希望这会有所帮助:)