Java自定義一個字典類(Dictionary)


標准Java庫只包含Dictionary的一個變種,名為:Hashtable。(散列表)

Java的散列表具有與AssocArray相同的接口(因為兩者都是從Dictionary繼承來的)。但有一個方面卻反映出了差別:執行效率。若仔細想想必須為一個get()做的事情,就會發現在一個Vector里搜索鍵的速度要慢得多。但此時用散列表卻可以加快不少速度。不必用冗長的線性搜索技術來查找一個鍵,而是用一個特殊的值,名為“散列碼”。散列碼可以獲取對象中的信息,然后將其轉換成那個對象“相對唯一”的整數(int)。所有對象都有一個散列碼,而hashCode()是根類Object 的一個方法。Hashtable 獲取對象的hashCode(),然后用它快速查找鍵。這樣可使性能得到大幅度提升。

/**
 * Created by xfyou on 2016/11/4.
 */
@SuppressWarnings("unchecked")
public class AssocArray extends Dictionary {
    private Vector keys = new Vector();
    private Vector values = new Vector();

    @Override
    public int size() {
        return keys.size();
    }

    @Override
    public boolean isEmpty() {
        return keys.isEmpty();
    }

    @Override
    public Enumeration keys() {
        return keys.elements();
    }

    @Override
    public Enumeration elements() {
        return values.elements();
    }

    @Override
    public Object get(Object key) {
        int index = keys.indexOf(key);
        if (-1 == index) {
            return null;
        }
        return values.elementAt(index);
    }

    @Override
    public Object put(Object key, Object value) {
        if (!keys.contains(key)) {
            keys.addElement(key);
            values.addElement(value);
            return key;
        }
        return null;
    }

    @Override
    public Object remove(Object key) {
        int index = keys.indexOf(key);
        if (-1 == index) {
            return null;
        }
        keys.removeElementAt(index);
        Object retVal = values.elementAt(index);
        values.removeElementAt(index);
        return retVal;
    }

    public static void main(String[] args) {
        AssocArray aa = new AssocArray();
        for (char c = 'a'; c <= 'z'; c++) {
            aa.put(String.valueOf(c), String.valueOf(c).toUpperCase());
        }
        char[] ca = {'a', 'e', 'i', 'o', 'u'};
        for (char aCa : ca)
            System.out.println("Uppercase: " + aa.get(String.valueOf(aCa)));
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM