兼具List和Map的“容器”類ListMap

字號:

“容器”兩個字之所以打上引號,是因為這個類沒有實現(xiàn) Collection 接口。要寫一個兼具 List 功能和 Map 功能的類,有幾個困難,一是 Java 不允許同時實現(xiàn) List 和 Map 兩個接口,二是這個 ListMap 結(jié)合了二者的功能之后,產(chǎn)生了特殊的接口。例如 Collection 的 contains 方法,在 ListMap 中就需要衍生出 containsKey 和 containsValue 兩個方法,分別判斷容器中是否存在指定的鍵和值。
    下面是我的實現(xiàn)(有什么 BUG 歡迎指正):
    packagemyCollections;
    importjava.util.*;
    /**
    *兼具List和Map功能的容器類
    */
    @SuppressWarnings({"unchecked"})
    publicclassListMap{
    privateListvalues=newArrayList();
    /**
    *獲取元素個數(shù)
    *
    *@return元素個數(shù)
    */
    publicintsize(){
    returnvalues.size();
    }
    /**
    *判斷容器是否為空
    *
    *@return如果為空則返回true。
    */
    publicbooleanisEmpty(){
    returnvalues.isEmpty();
    }
    /**
    *獲得一個值迭代器
    *
    *@return值迭代器
    */
    publicIteratoriterator(){
    returnvalues().iterator();
    }
    /**
    *獲得一個值數(shù)組
    *
    *@return值數(shù)組
    */
    publicV[]toArray(){
    Object[]arr=newObject[values.size()];
    for(inti=0;i    arr[i]=values.get(i).value;
    }
    return(V[])arr;
    }
    /**
    *檢查指定的鍵是否存在
    *
    *@paramkey鍵
    *
    *@return如果存在則返回true。
    */
    publicbooleancontainsKey(Kkey){
    if(key==null)returnfalse;
    for(Itemitem:values){
    if(item.key.equals(key)){
    returntrue;
    }
    }
    returnfalse;
    }
    /**
    *檢查指定的值是否存在
    *
    *@paramvalue值
    *
    *@return如果存在則返回true。
    */
    publicbooleancontainsValue(Vvalue){
    for(Itemitem:values){
    if(item.value.equals(value)){
    returntrue;
    }
    }
    returnfalse;
    }
    /**
    *通過鍵獲得值
    *
    *@paramkey鍵
    *
    *@return值
    */
    publicVget(Kkey){
    for(Itemitem:values){
    if(item.key.equals(key)){
    returnitem.value;
    }
    }
    returnnull;
    }