标签:
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(); } //获取Key public K getKey(){ return this.key; } //获取value public 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计算hashCode public 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(); } //判断是否包含某个key public boolean containsKey(K key){ return super.contains(new SimpleEntry<K, V>(key, null)); } //判断是否包含某个value public boolean containsValue(V value){ for(SimpleEntry<K, V> se : this){ if(se.getValue().equals(value)); return true; } return false; } //根据指定key取出对应的value public 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(); } }
标签:
原文地址:http://blog.csdn.net/lsx991947534/article/details/45674431