`
kael____
  • 浏览: 19420 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Set改写成Map使用

阅读更多

 

package com.kael;

import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;

/**
 * 
 *  
 * @Title:SetAndMap 
 * @Description: Map和Set 装换
 * @Copyright:Copyright (c) 2012 
 * @Date:2012-7-20 
 * @author feilong.li
 */
public class SetAndMap {
	
	public static void main(String[] args) {
		SetMap<String, Integer> scores = new SetMap<String, Integer>();
		Map<String, Integer> map = new HashMap<String, Integer>();
		scores.put("C", 90);
		scores.put("Java", 100);
		scores.put("Oracle", 98);
		
		map.put("C", 90);
		map.put("Java", 100);
		map.put("Oracle", 98);
		
		System.out.println(scores);
		System.out.println("scores.size() = " + scores.size());
		System.out.println(scores.containsKey("Java"));
		System.out.println(scores.containsValue(100));
		System.out.println(scores.getValue("C"));
		System.out.println(scores.removeEntry("C"));
		System.out.println(scores);
		scores.clear();
		System.out.println(scores);
		scores.putAll(map);
		System.out.println(scores);
	}
	
}

class SimpleEntry<K,V> implements Map.Entry<K, V> ,Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -5468059496835899481L;
	private 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();
		this.value = entry.getValue();
	}
	
	@Override
	public K getKey() {
		return key;
	}

	@Override
	public V getValue() {
		return value;
	}

	@Override
	public V setValue(V value) {
		V oldValue = this.value;
		this.value = value;
		return oldValue;
	}
	
	@Override
	public int hashCode() {
		return key == null ? 0 : key.hashCode();
	}
	@Override
	public boolean equals(Object obj) {
		if(obj == this) {
			return true;
		}
		if(obj.getClass() == this.getClass()) {
			SimpleEntry<K, V> simpleEntry = this;
			return simpleEntry.getKey().equals(getKey());
		}
		return false;
	}
	@Override
	public String toString() {
		return key +"="+ value;
	}
	
}

/*
 * 定义自己的Map
 */
class SetMap<K, V> extends HashSet<SimpleEntry<K, V>> {
	
	private static final long serialVersionUID = -9050259671066619118L;

	/**
	 * 清空
	 */
	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 v) {
		for(SimpleEntry<K, V> entry : this) {
			if(entry.getValue().equals(v)) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 指定key返回value
	 */
	public V getValue(K key) {
		for(SimpleEntry<K, V> entry : this) {
			if(entry.getKey().equals(key)) {
				return entry.getValue();
			}
		}
		return null;
	}
	
	/**
	 * 将指定key-value放入Map
	 */
	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> map) {
		for(K key : map.keySet()) {
			add(new SimpleEntry<K, V>(key, map.get(key)));
		}
	}
	
	/**
	 * 根据key删除指定的key-value
	 */
	public V removeEntry(K key) {
		for(Iterator<SimpleEntry<K, V>> iterator = this.iterator();iterator.hasNext();) {
			SimpleEntry<K, V> entry = iterator.next();
			if(entry.getKey().equals(key)) {
				iterator.remove();
				return entry.getValue();
			}
		}
		return null;
	}
	
	/**
	 * 获取这个Map中包含多少对key-value
	 */
	public int size() {
		return super.size();
	}
}




输出结果:
[C=90, Oracle=98, Java=100]
scores.size() = 3
true
true
90
90
[Oracle=98, Java=100]
[]
[C=90, Oracle=98, Java=100]

分享到:
评论

相关推荐

    wireshark 包解析插件

    该资源为用脚本编写的适用于wireshark的一个新的协议。即当wireshark不能及时解析..."map_port_set.lua"&#41; 2. 将map_port_set.lua 拷贝到wireshark根目录下 3. 重启wireshark 打开laft6-pcp.pcap观察是否解析成功

    Java集合面试题 52道

    使用集合框架可以带来许多好处,包括容量自增长、提供高性能的数据结构和算法、可以方便地扩展或改写集合、提高代码复用性和可操作性,以及降低代码维护和学习新 API 成本。 5. 常用的集合类 常用的集合类有 Map ...

    Java面试题及答案-共72道.docx

    使用集合框架可以带来很多好处,例如容量自增长、提供了高性能的数据结构和算法、可以方便地扩展或改写集合、提高代码复用性和可操作性。并且,通过使用 JDK 自带的集合类,可以降低代码维护和学习新 API 成本。 ...

    Java 72 道面试题及答案.docx

    Java 集合框架是一种用于存储和管理对象的容器,主要有三种类型:Set(集)、List(列表)和 Map(映射)。集合的特点主要有两点:一是集合用于存储对象的容器,对象是用来封装数据的,对象多了也需要存储集中式管理...

    Java集合面试题 52道.pdf

    集合类可以分为三种:Set、List和Map。Set是一个无序的集合,不能存储重复的元素;List是一个有序的集合,允许存储重复的元素;Map是一个键值对的集合,存储键值对之间的映射关系。 集合的特点 集合的特点主要有两...

    40道java集合面试题含答案(很全很详细)

    Collection接口下有Set和List子接口,而Map接口用于存储键值对。 2. **集合的特点**: - 集合是对象容器,便于管理大量对象。 - 相比数组,集合的长度可变,适应不同数量的对象存储需求。 3. **集合与数组的区别...

    Java 72道面试题和答案.docx

    Collection接口包括了Set、List和Queue三个子接口,而Map接口则用于存储键值对。 1. **List接口**: - List是一个有序容器,元素的插入和取出顺序一致,允许元素重复,并且可以插入多个null元素。ArrayList、...

    2024年java面试题-java集合相关面试题

    ### 三、List、Set、Map的区别 - **List**:有序容器,元素可以重复。 - **Set**:无序容器,不允许重复元素。 - **Map**:键值对容器,键唯一,值可以重复。 ### 四、集合框架底层数据结构 #### 1. List - **...

    Java应用程序-习题-第8章.doc

    3. Java SE 5.0 改写了集合框架中的全部接口和类,提供泛型支持,在声明集合变量、创建集合对象时,传入类型实参。 4. 如果 Foo 是 Bar 的一个子类型,G 是一个 Java 泛型,那么,G&lt;Foo&gt; 是 G&lt;Bar&gt; 的子类,Foo[] ...

    自定义标签教程

    在Struts框架中,为了生成支持改写URL的链接并使用`jsessionid`对链接进行编码,开发者通常需要创建一个脚本片段(scriptlet)来处理请求参数。这种做法不仅增加了代码复杂度,还可能导致维护困难。为了解决这一问题,...

    PageHelper实现前端分页

    2. **SQL改写**:利用MyBatis的Interceptor接口,拦截Executor的query方法,对原始的SELECT语句进行改写,添加LIMIT和OFFSET子句。 3. **结果处理**:返回结果时,PageHelper会将结果包装成PageInfo对象,包含分页所...

    hadoop 开发规范

    - **union all改写成join**:减少不必要的数据复制。 - **大数据量时,怎样让全局count/sum distinct更快?**:使用`APPROX_COUNT_DISTINCT`替代`COUNT(DISTINCT)`。 - **有小表存在的情况下,看看能否使用mapjoin**...

    java开发手册.doc

    - 对于可变集合,使用`Collections.unmodifiableList/Map/Set`返回不可修改视图。 - 避免在`equals()`方法中直接比较集合,应先判断大小再逐个元素比较。 6. **并发处理**: - 使用`synchronized`关键字时,确保...

    SparkCL框架知识

    SparkCL,是基于大数据中GPU运行的框架,他是在spark的基础的,对spark中的map以及reduce所进行的改进,也就是说,sparkCL通过自定义mapCL/ reduceCL改写transformation。 其中mapCL/ reduceCL 里自定义funcX函数,...

Global site tag (gtag.js) - Google Analytics