2013-07-30 15 views
0

我有一個哈希表一樣,如何聲明最後HashMap的,不應該允許更新或刪除元素

public static void main(String[] args) { 
    final Map<String, String> daysMap = new HashMap(7); 
    daysMap.put("1", "Sunday"); 
    daysMap.put("2", "Monday"); 
    daysMap.put("3", "Tuesday"); 
    daysMap.put("4", "Wednesday"); 
    daysMap.put("5", "Thursday"); 
    daysMap.put("6", "Friday"); 
    daysMap.put("7", "Saturday"); 
} 

在這張地圖上
1.應不允許把超過7元
2 。不應該更新對應鍵的值[如daysMap.put(「5」,「xxx」);]
3.不允許刪除任何鍵

怎麼辦?

+0

Java?編譯時是否已知所有的值? – hmjd

+0

是java。我們在編譯時不知道。 – Manoj

+0

順便說一下,容量最終會成爲'16'的默認值,因此將其設置爲'7'將無濟於事。 –

回答

4

您可以實現一個新的HashMap

public class CoolMap<K, V> extends HashMap<K, V> { 

@Override 
public V put(K key, V value) { 

    if (size() == 7) { 
     throw new IllegalStateException("Size is at max!"); 
    } else { 

     // If there is something already with that key 
     if (containsKey(value)) { 
      // do nothing 
      return value; 
     } else { 
      // put inside 
      return super.put(key, value); 
     } 

    } 

} 

@Override 
public void putAll(Map<? extends K, ? extends V> collection) { 

    if (collection.size() > 7) { 
     throw new IllegalStateException("Size is at max!"); 
    } else { 
     super.putAll(collection); 
    } 

} 

@Override 
public V remove(Object key) { 
    return null;// doesn't remove anything 
} 
0

爲什麼難道你不創建自己的對象,它包含一個私人的HashMap,然後你可以允許對被公開私人HashMap的什麼方法?

1

如已經討論的,點2和3覆蓋這樣

import java.util.*; 

    public class OP2 { 
     public static void main(String[] s) { 
      //object hash table 
      Hashtable<String,String> table = new Hashtable<String,String>(); 
      table. 

      // populate the table 
      table.put("1", "Sunday"); 
      table.put("2", "Monday"); 
      table.put("3", "Tuesday"); 
      table.put("4", "Wednesday"); 
      table.put("5", "Thursday"); 
      table.put("6", "Friday"); 
      table.put("7", "Saturday"); 

      System.out.println("Initial collection: "+table); 

      // create unmodifiable map 
      Map m = Collections.unmodifiableMap(table); 

      // try to modify the collection 
     // m.put("key3", "value3"); 
     //Uncomment the above line and an error is obtained 
     } 
    } 

而且對於第一個問題它會更好,當你填入你的地圖調用一個函數: -

public boolean putAndTest(MyKey key, MyValue value) { 
      if (map.size() >= MAX && !map.containsKey(key)) { 
       return false; 
      } else { 
       map.put("Whatever you want"); 
       return true; 
      } 
     }