⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multimap.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
字号:
// ========================================================================// Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.// ------------------------------------------------------------------------// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.// ========================================================================package org.mortbay.util;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;/* ------------------------------------------------------------ *//** A multi valued Map. * This Map specializes HashMap and provides methods * that operate on multi valued items.  * <P> * Implemented as a map of LazyList values * * @see LazyList * @author Greg Wilkins (gregw) */public class MultiMap extends HashMap    implements Cloneable{    /* ------------------------------------------------------------ */    /** Constructor.      */    public MultiMap()    {}        /* ------------------------------------------------------------ */    /** Constructor.      * @param size Capacity of the map     */    public MultiMap(int size)    {        super(size);    }        /* ------------------------------------------------------------ */    /** Constructor.      * @param map      */    public MultiMap(Map map)    {        super((map.size()*3)/2);        putAll(map);    }        /* ------------------------------------------------------------ */    /** Get multiple values.     * Single valued entries are converted to singleton lists.     * @param name The entry key.      * @return Unmodifieable List of values.     */    public List getValues(Object name)    {        return LazyList.getList(super.get(name),true);    }        /* ------------------------------------------------------------ */    /** Get a value from a multiple value.     * If the value is not a multivalue, then index 0 retrieves the     * value or null.     * @param name The entry key.     * @param i Index of element to get.     * @return Unmodifieable List of values.     */    public Object getValue(Object name,int i)    {        Object l=super.get(name);        if (i==0 && LazyList.size(l)==0)            return null;        return LazyList.get(l,i);    }            /* ------------------------------------------------------------ */    /** Get value as String.     * Single valued items are converted to a String with the toString()     * Object method. Multi valued entries are converted to a comma separated     * List.  No quoting of commas within values is performed.     * @param name The entry key.      * @return String value.     */    public String getString(Object name)    {        Object l=super.get(name);        switch(LazyList.size(l))        {          case 0:              return null;          case 1:              Object o=LazyList.get(l,0);              return o==null?null:o.toString();          default:              StringBuffer values=new StringBuffer(128);              synchronized(values)              {                  for (int i=0; i<LazyList.size(l); i++)                                {                      Object e=LazyList.get(l,i);                      if (e!=null)                      {                          if (values.length()>0)                              values.append(',');                          values.append(e.toString());                      }                  }                     return values.toString();              }        }    }        /* ------------------------------------------------------------ */    public Object get(Object name)     {        Object l=super.get(name);        switch(LazyList.size(l))        {          case 0:              return null;          case 1:              Object o=LazyList.get(l,0);              return o;          default:              return LazyList.getList(l,true);        }    }        /* ------------------------------------------------------------ */    /** Put and entry into the map.     * @param name The entry key.      * @param value The entry value.     * @return The previous value or null.     */    public Object put(Object name, Object value)     {        return super.put(name,LazyList.add(null,value));    }    /* ------------------------------------------------------------ */    /** Put multi valued entry.     * @param name The entry key.      * @param values The List of multiple values.     * @return The previous value or null.     */    public Object putValues(Object name, List values)     {        return super.put(name,values);    }        /* ------------------------------------------------------------ */    /** Put multi valued entry.     * @param name The entry key.      * @param values The String array of multiple values.     * @return The previous value or null.     */    public Object putValues(Object name, String[] values)     {        Object list=null;        for (int i=0;i<values.length;i++)            list=LazyList.add(list,values[i]);        return put(name,list);    }            /* ------------------------------------------------------------ */    /** Add value to multi valued entry.     * If the entry is single valued, it is converted to the first     * value of a multi valued entry.     * @param name The entry key.      * @param value The entry value.     */    public void add(Object name, Object value)     {        Object lo = super.get(name);        Object ln = LazyList.add(lo,value);        if (lo!=ln)            super.put(name,ln);    }    /* ------------------------------------------------------------ */    /** Add values to multi valued entry.     * If the entry is single valued, it is converted to the first     * value of a multi valued entry.     * @param name The entry key.      * @param values The List of multiple values.     */    public void addValues(Object name, List values)     {        Object lo = super.get(name);        Object ln = LazyList.addCollection(lo,values);        if (lo!=ln)            super.put(name,ln);    }        /* ------------------------------------------------------------ */    /** Add values to multi valued entry.     * If the entry is single valued, it is converted to the first     * value of a multi valued entry.     * @param name The entry key.      * @param values The String array of multiple values.     */    public void addValues(Object name, String[] values)     {        Object lo = super.get(name);        Object ln = LazyList.addCollection(lo,Arrays.asList(values));        if (lo!=ln)            super.put(name,ln);    }        /* ------------------------------------------------------------ */    /** Remove value.     * @param name The entry key.      * @param value The entry value.      * @return true if it was removed.     */    public boolean removeValue(Object name,Object value)    {        Object lo = super.get(name);        Object ln=lo;        int s=LazyList.size(lo);        if (s>0)        {            ln=LazyList.remove(lo,value);            if (ln==null)                super.remove(name);            else                super.put(name, ln);        }        return LazyList.size(ln)!=s;    }        /* ------------------------------------------------------------ */    /** Put all contents of map.     * @param m Map     */    public void putAll(Map m)    {        Iterator i = m.entrySet().iterator();        boolean multi=m instanceof MultiMap;        while(i.hasNext())        {            Map.Entry entry =                (Map.Entry)i.next();            if (multi)                super.put(entry.getKey(),LazyList.clone(entry.getValue()));            else                put(entry.getKey(),entry.getValue());        }    }    /* ------------------------------------------------------------ */    /**      * @return Map of String arrays     */    public Map toStringArrayMap()    {        HashMap map = new HashMap(size()*3/2);                Iterator i = super.entrySet().iterator();        while(i.hasNext())        {            Map.Entry entry = (Map.Entry)i.next();            Object l = entry.getValue();            String[] a = LazyList.toStringArray(l);            // for (int j=a.length;j-->0;)            //    if (a[j]==null)            //         a[j]="";            map.put(entry.getKey(),a);        }        return map;    }        /* ------------------------------------------------------------ */    public Object clone()    {        MultiMap mm = (MultiMap) super.clone();                Iterator iter = mm.entrySet().iterator();        while (iter.hasNext())        {            Map.Entry entry = (Map.Entry)iter.next();            entry.setValue(LazyList.clone(entry.getValue()));        }                return mm;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -