Java集合研究一:Set與Map

來源:互聯網
上載者:User

標籤:

Set代表一種無序集合,集合元素不可重複;Map代表一種多個key-value對組成的集合

從Set和Map的繼承體系圖看,如果從名稱分析,Set和Map有著千絲萬縷的聯絡。並且從JDK中提供的Map介面中,你會發現提供了這樣一個方法: Set<K> keySet();這就說明了,如果拋開Map中的value,那麼Map中的所有key的實際上就是一個Set集合,而且我們查詢的時候常常是通過key來尋找value,那麼我們可以將value和key綁定在一起,將value看成是key的附屬物,那麼你會驚奇的發現,其實Map就是一個Set集合,因此我們可以認定Map是Set的擴充,是一種特殊的Set集合。下面將嘗試用Set擴充成Map

import java.util.HashSet;import java.util.Iterator;import java.util.Map;public class SimpleEntry <K,V> implements Map.Entry<K,V>,java.io.Serializable{private final K key;private V value;public SimpleEntry(K key, V value){this.key = key;this.value = value;}public SimpleEntry(Map.Entry<? extends K, ? extends V> entry){this.key = entry.getKey();}//擷取Keypublic K getKey(){return this.key;}//擷取valuepublic V getValue(){return this.value;}//改變key-value的value值public V setValue(V value){V oldValue = this.value;this.value = value;return oldValue;}//根據key比較兩個SimpleEntry是否相等public boolean equals(Object o){if(o == this){return true;}if(o.getClass() == SimpleEntry.class){SimpleEntry se = (SimpleEntry)o;return se.getKey().equals(getKey());}return false;}//根據key計算hashCodepublic int hashCode(){return key == null ? 0 : key.hashCode();}public String toString(){return key + "=" + value;}}    //繼承HashSet實現一個Map   public class SetToMap<K, V> extends HashSet<SimpleEntry<K, V>>{//實現清空所有key-value對的方法public void clear(){super.clear();}//判斷是否包含某個keypublic boolean containsKey(K key){return super.contains(new SimpleEntry<K, V>(key, null));}    //判斷是否包含某個valuepublic boolean containsValue(V value){for(SimpleEntry<K, V> se : this){if(se.getValue().equals(value));return true;}return false;}//根據指定key取出對應的valuepublic V get(Object key){for(SimpleEntry<K, V> se :this){if(se.getKey().equals(key)){return se.getValue();}}return null;}//將指定key-value對放入集合中public V put(K key, V value){add(new SimpleEntry<K ,V>(key, value));return value;}//將另一Map的key-value對放入該Map中public void putAll(Map<? extends K, ? extends V> m){for(K key : m.keySet()){add(new SimpleEntry<K, V>(key, m.get(key)));}}//根據指定key刪除key-value對public V removeEntry(Object key){for(Iterator<SimpleEntry<K, V>> it = this.iterator(); it.hasNext(); ){SimpleEntry<K, V> en = (SimpleEntry<K, V>) it.next();if(en.getKey().equals(key)){V v = en.getValue();it.remove();return v;}}return null;}//擷取該Map中包含多少個key-value對public int size(){return super.size();}}


Java集合研究一:Set與Map

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.