Java集合研究一:Set与Map

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();
	}
	

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值