“容器”兩個字之所以打上引號,是因為這個類沒有實現(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{
privateList- values=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;
}
下面是我的實現(xiàn)(有什么 BUG 歡迎指正):
packagemyCollections;
importjava.util.*;
/**
*兼具List和Map功能的容器類
*/
@SuppressWarnings({"unchecked"})
publicclassListMap
privateList
/**
*獲取元素個數(shù)
*
*@return元素個數(shù)
*/
publicintsize(){
returnvalues.size();
}
/**
*判斷容器是否為空
*
*@return如果為空則返回true。
*/
publicbooleanisEmpty(){
returnvalues.isEmpty();
}
/**
*獲得一個值迭代器
*
*@return值迭代器
*/
publicIterator
returnvalues().iterator();
}
/**
*獲得一個值數(shù)組
*
*@return值數(shù)組
*/
publicV[]toArray(){
Object[]arr=newObject[values.size()];
for(inti=0;i
}
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;
}