用Java创建智能数据结构

时间:2016-11-27 23:43:43

标签: java class tree hashtable abstract-data-type

所以我试图创建一个基于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)

1 个答案:

答案 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);
    }
}

希望这会有所帮助:)