2012-04-17 104 views
0

我是Java Collections的新手。我正在通過Map,所以請告訴我,就像java提供了Map一樣,我們是否也可以製作自己的Map?我們來看一個名爲MineMap的地圖。請告訴我如何做到這一點。我在做谷歌搜索,我發現了這樣的事:Java地圖實現

public interface MyMap 
{ 
    public void put(Object key,Object value); 
    public Object get(Object key); 
    public int size(); 
    public Set keySet(); 
    public Set entrySet(); 
    public interface MyEntry 
    { 
     public Object getKey(); 
     public Object getValue(); 
    } 
} 

及其實施:

class MySimpleMap implements MyMap 
{ 
    private ArrayList keys; 
    private ArrayList values; 
    private int index; 

    public MySimpleMap() 
    { 
     keys=new ArrayList(); 
     values=new ArrayList(); 
     index=0; 
    } 

    public void put(Object key,Object value) 
    { 
     keys.add(key); 
     values.add(value); 
     index++; 
    } 

    public Object get(Object key) 
    { 
     int i=keys.indexOf(key); 
     if (i>=0) 
      return values.get(i); 
     else 
      return null; 
    } 

    public int size() 
    { 
     return index; 
    } 

    public Set keySet() 
    { 
     HashSet set=new HashSet(); 
     set.addAll(keys); 
     return set; 
    } 

    //Nested class starts... 
    class MySimpleEntry implements MyMap.MyEntry 
    { 
     Object key; 
     Object value; 

     public MySimpleEntry(Object k,Object v) 
     { 
      key=k; 
      value=v; 
     } 

     public Object getKey() 
     { 
      return key; 
     } 

     public Object getValue() 
     { 
      return value; 
     } 
}// Nested class ends. 

public Set entrySet() 
{ 
    HashSet set=new HashSet(); 
    for (int i=0;i<index;i++) 
    { 
     Object k=keys.get(i); 
     Object v=values.get(i); 
     MySimpleEntry temp=new MySimpleEntry(k,v); 
     set.add(temp); 
    } 
    return set; 
} 
} 

,最後這個是使用這個類:

class MyMapDemo 
{ 
    public static void main(String arr[]) 
    { 
     MySimpleMap map=new MySimpleMap(); 
     map.put("Amit","Java"); 
     map.put("Rahul",".Net"); 
     map.put("Nitin","SQT"); 
     map.put("Ajay","PHP"); 
     map.put("Raman","Java"); 
     System.out.println("There are "+map.size()+" elemenets in the map..."); 
     System.out.println("contents of Map..."); 
     Set s=map.entrySet(); 
     Iterator itr=s.iterator(); 
     while(itr.hasNext()) 
     { 
      MyMap.MyEntry m=(MyMap.MyEntry) itr.next(); 
      System.out.println(m.getKey()+"\t"+m.getValue()); 
     } 
     Scanner in=new Scanner(System.in); 
     System.out.println("Enter Name to find out course, ctrl+c to terminate..."); 
     while(true) 
     { 
      System.out.println("Name:"); 
      String n=in.nextLine(); 
      System.out.println("Course is:"+map.get(n)); 
     } 
} 
} 

,但我需要一些簡單的實現。

+1

爲什麼和如何更簡單?你真的需要這些? – simchona 2012-04-17 03:23:24

+0

更簡單?你的實現實際上太簡單了,例如,它缺少對密鑰的唯一性檢查。 – trutheality 2012-04-17 03:25:15

回答

5

你提到你是初學者,想實現你自己的地圖。在初學者水平,編寫你的地圖爲時尚早。集合框架已經給出了幾種數據類型的優化和驗證實現。理解這些而不是重新發明車輪很重要。

  • 您可以輕鬆獲取java庫資源,並嘗試查看它們是如何實現集合類的。這是最先進的發展,涵蓋了許多細節。

  • 關於實施。

但是,您發現的任何東西都不能直接歸類爲地圖。毫無疑問,類似的事情。

  • 不是一般的實現。
  • 沒有實現Map,因此可以在現有的Map類型變量中使用impl。
  • 不能使用Collections.class中的算法。

您可能要執行寫諸如包括上述功能。

// Hash map java library defined as follows. 
public class HashMap<K,V> 
    extends AbstractMap<K,V> 
    implements Map<K,V>, Cloneable, Serializable 


// Hence, you may want to write this. 
public class MyMap<K,V> 
    extends AbstractMap<K, V> // May skip this 
    implements Map<K,V>, Cloneable, Serializable // important 
{ 
    //Now it will ask to write all the methods which are defined in Map interface. 
    //These are minimum methods required for Map operations. 
}