码迷,mamicode.com
首页 > 编程语言 > 详细

Java集合研究一:Set与Map

时间:2015-05-13 10:43:35      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

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

}


Java集合研究一:Set与Map

标签:

原文地址:http://blog.csdn.net/lsx991947534/article/details/45674431

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!