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

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15991.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论