zoukankan      html  css  js  c++  java
  • 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)));
        }
    }
  • 相关阅读:
    解决jenkins下使用HTML Publisher插件后查看html报告显示不正常
    Jmeter之用于json格式的响应断言
    jmeter 打不开 提示“Not able to find Java executable or version”的解决办法
    appium 使用name 定位报错 Locator Strategy 'name' is not supported for this session【appium-desktop】
    打开Github网站反应慢的问题
    Linux-(telnet,wget)
    Linux-(rcp,scp)
    解决 https 证书验证不通过的问题
    Linux-(ping,traceroute,ss)
    Linux-(lsof,ifconfig,route)
  • 原文地址:https://www.cnblogs.com/frankyou/p/6031069.html
Copyright © 2011-2022 走看看