java程序:set改造成map
逻辑:
set是无序不重复数据元素的集合。
map是另一种set,如果将<key,value>看成一个整体的话,其实就是set。在map中,若用map的keyset()方法将key提取出来,便构成了一个set集合。
所以,就定义一个整体SimpleEntry<K,V>作为元素存入set。
代码:
/*
*SimpleEntry<K,V>作为map对象的存储元素
*/
class SimpleEntry<K, V>
implements Map.Entry<K, V>, Serializable
{
// map中的key不可变
private final K key;
private V value;
public SimpleEntry(K paramK, V paramV)
{
this.key = paramK;
this.value = paramV;
}
public SimpleEntry(Map.Entry<? extends K, ? extends V> paramEntry)
{
this.key = paramEntry.getKey();
this.value = paramEntry.getValue();
}
public K getKey()
{
return this.key;
}
public V getValue()
{
return this.value;
}
public V setValue(V paramV)
{
Object localObject = this.value;
this.value = paramV;
return localObject;
}
public boolean equals(Object paramObject)
{
if (paramObject == this)
{
return true;
}
if (paramObject.getClass() == SimpleEntry.class)
{
SimpleEntry localSimpleEntry = (SimpleEntry)paramObject;
return localSimpleEntry.getKey().equals(getKey());
}
return false;
}
public int hashCode()
{
return this.key == null ? 0 : this.key.hashCode();
}
public String toString()
{
return this.key + "=" + this.value;
}
}
/*
*Set2Map<K, V>继承自hashset,底层是利用hashset来存储,但存储的是<K,V>这样的二元组,所以可以看成是一个map
*/
public class Set2Map<K, V> extends HashSet<SimpleEntry<K, V>>
{
public void clear()
{
super.clear();
}
public boolean containsKey(K paramK)
{
return super.contains(new SimpleEntry(paramK, null));
}
boolean containsValue(Object paramObject)
{
for (SimpleEntry localSimpleEntry : this)
{
if (localSimpleEntry.getValue().equals(paramObject))
{
return true;
}
}
return false;
}
public V get(Object paramObject)
{
for (SimpleEntry localSimpleEntry : this)
{
if (localSimpleEntry.getKey().equals(paramObject))
{
return localSimpleEntry.getValue();
}
}
return null;
}
public V put(K paramK, V paramV)
{
add(new SimpleEntry(paramK, paramV));
return paramV;
}
//内部用了迭代器实现
public void putAll(Map<? extends K, ? extends V> paramMap)
{
for (Iterator localIterator = paramMap.keySet().iterator(); localIterator.hasNext(); ) { Object localObject = localIterator.next();
add(new SimpleEntry(localObject, paramMap.get(localObject)));
}
}
//内部用了迭代器实现
public V removeEntry(Object paramObject)
{
Iterator localIterator = iterator();
while (localIterator.hasNext())
{
SimpleEntry localSimpleEntry = (SimpleEntry)localIterator.next();
if (localSimpleEntry.getKey().equals(paramObject))
{
Object localObject = localSimpleEntry.getValue();
localIterator.remove();
return localObject;
}
}
return null;
}
public int size()
{
return super.size();
}
}
测试程序:
public class Set2MapTest
{
public static void main(String[] paramArrayOfString)
{
Set2Map localSet2Map = new Set2Map();
localSet2Map.put("语文", Integer.valueOf(89));
localSet2Map.put("数学", Integer.valueOf(83));
localSet2Map.put("英文", Integer.valueOf(80));
System.out.println(localSet2Map);
System.out.println(localSet2Map.size());
localSet2Map.removeEntry("数学");
System.out.println("删除key为\"数学\"的Entry之后:" + localSet2Map);
System.out.println("语文成绩:" + localSet2Map.get("语文"));
System.out.println("是否包含\"英文\"key :" + localSet2Map.containsKey("英文"));
System.out.println("是否包含 82 value :" + localSet2Map.containsValue(Integer.valueOf(82)));
localSet2Map.clear();
System.out.println("执行clear()方法之后的集合:" + localSet2Map);
}
}
reference:
1. 《疯狂java,突破程序员基本功的16课》 李刚。
java程序:set改造成map的更多相关文章
- 分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map
原文:分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map import java.util.Map; import org.apache.commons.lang.Ar ...
- Java程序员岗位
Java程序员岗位面试题有哪些? 1.面向对象的特征有哪些方面(1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择 ...
- Java程序员面试题集(116-135)
摘要:这一部分讲解基于Java的Web开发相关面试题,即便在Java走向没落的当下,基于Java的Web开发因为拥有非常成熟的解决方案,仍然被广泛应用.不管你的Web开发中是否使用框架,JSP和Ser ...
- JAVA基础--容器 Set, List, Map
Colections接口, Iterator接口, Set接口, List接口, Comparable接口, Map接口 Collections类 容器:装各种对象. 所有容器都在java.util里 ...
- 使用linux perf工具生成java程序火焰图
pre.cjk { font-family: "Nimbus Mono L", monospace } p { margin-bottom: 0.1in; line-height: ...
- Efficient&Elegant:Java程序员入门Cpp
最近项目急需C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 老特工我还需保持敬畏(内容太多),本文会从一个Java程序员的角度,制定高效学习路线快速入门C++ . Java是为了 ...
- JAVA程序员面试宝典
程序员面试之葵花宝典 面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...
- spark之java程序开发
spark之java程序开发 1.Spark中的Java开发的缘由: Spark自身是使用Scala程序开发的,Scala语言是同时具备函数式编程和指令式编程的一种混血语言,而Spark源码是基于Sc ...
- 聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路
引言 很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想说,这位同学你站出来,保证不打死你,-_-),原文章名称叫做<回答阿里社招面试 ...
- 编写高质量代码:改善Java程序的151个建议 --[78~92]
编写高质量代码:改善Java程序的151个建议 --[78~92] HashMap中的hashCode应避免冲突 多线程使用Vector或HashTable Vector是ArrayList的多线程版 ...
随机推荐
- Java基础知识强化01:short s = 1; s = s + 1;与short s = 1; s += 1;
1.short s = 1; s = s + 1;有没有问题?如果有怎么解决? short s = 1; s += 1;有没有问题?如果有怎么解决? 2.理解: short s=1; s=s+ ...
- OSX 10.10+Xcode5.1 无法启动或者安装应用程序到iOS 6.1 simulator
错误症状: OSX 10.10+Xcode5.1 无法启动或者安装应用程序到iOS 6.1 simulator 错误原因: iOS Simulator 内核要使用OSX 系统内核,所以iOS Simu ...
- PL/SQL 记录集合IS TABLE OF的使用
在PL/SQL代码块中使用select into 赋值的话,有可能返回的是一个结果集.此时,如果使用基本类型或自定义的记录类型,将会报错. 因此,需要定义一个变量,是某种类型的集合.下面以一个基于表的 ...
- SpringSecurity 在MVC 中的简单使用(翻译的,稍加改动)
Spring Security允许开发人员轻松地将安全功能集成到J2EE Web应用程序中,它通过Servlet过滤器实现“用户自定义”安全检查. 在本教程中,我们将向您展示如何在Spring MVC ...
- angular应用前景
完成了angularJs的学习,突然想到,angularJS是否会影响到seo.于是查阅了很多资料,技术博客,这种想法得到了证实. 爬虫不能识别js渲染的内容.所以引起了我对angular应用前景的思 ...
- 02.[WPF]如何固定窗口的大小
在WPF开发过程中碰到一个需求,要求保证窗口大小不变,即便是双击 titlebar 也不能改变窗口大小和位置.要实现这样的效果,需要执行如下步骤: 1,分别设置窗口的 Width/MaxWidth/M ...
- Eclipse基本设置
1.设置java的JDK:window->preferences->Java->Installed JREs->Add 2.设置文件默认打开方式: window->pre ...
- Xcode 7真机测试详解
1.准备 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk image 首先,准备好下面的设 ...
- SGU 195. New Year Bonus Grant
时间限制:0.75s 空间限制:4M 题意: 在一颗树(最多500000个节点)中,可以对节点染色,但是一个节点染了色后,它的父节点和兄弟节点都不能再染了,求最大的染色节点数,并输出所有染色节点. S ...
- ecshop标签大全
页面关键字:{$keywords} 页面标题:{$page_title} 产品分类:父分类列表 {foreach from=$categories item=cat } 父分类超链接 [u ...