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不能及时解析..."map_port_set.lua") 2. 将map_port_set.lua 拷贝到wireshark根目录下 3. 重启wireshark 打开laft6-pcp.pcap观察是否解析成功
使用集合框架可以带来许多好处,包括容量自增长、提供高性能的数据结构和算法、可以方便地扩展或改写集合、提高代码复用性和可操作性,以及降低代码维护和学习新 API 成本。 5. 常用的集合类 常用的集合类有 Map ...
使用集合框架可以带来很多好处,例如容量自增长、提供了高性能的数据结构和算法、可以方便地扩展或改写集合、提高代码复用性和可操作性。并且,通过使用 JDK 自带的集合类,可以降低代码维护和学习新 API 成本。 ...
Java 集合框架是一种用于存储和管理对象的容器,主要有三种类型:Set(集)、List(列表)和 Map(映射)。集合的特点主要有两点:一是集合用于存储对象的容器,对象是用来封装数据的,对象多了也需要存储集中式管理...
集合类可以分为三种:Set、List和Map。Set是一个无序的集合,不能存储重复的元素;List是一个有序的集合,允许存储重复的元素;Map是一个键值对的集合,存储键值对之间的映射关系。 集合的特点 集合的特点主要有两...
Collection接口下有Set和List子接口,而Map接口用于存储键值对。 2. **集合的特点**: - 集合是对象容器,便于管理大量对象。 - 相比数组,集合的长度可变,适应不同数量的对象存储需求。 3. **集合与数组的区别...
Collection接口包括了Set、List和Queue三个子接口,而Map接口则用于存储键值对。 1. **List接口**: - List是一个有序容器,元素的插入和取出顺序一致,允许元素重复,并且可以插入多个null元素。ArrayList、...
### 三、List、Set、Map的区别 - **List**:有序容器,元素可以重复。 - **Set**:无序容器,不允许重复元素。 - **Map**:键值对容器,键唯一,值可以重复。 ### 四、集合框架底层数据结构 #### 1. List - **...
3. Java SE 5.0 改写了集合框架中的全部接口和类,提供泛型支持,在声明集合变量、创建集合对象时,传入类型实参。 4. 如果 Foo 是 Bar 的一个子类型,G 是一个 Java 泛型,那么,G<Foo> 是 G<Bar> 的子类,Foo[] ...
在Struts框架中,为了生成支持改写URL的链接并使用`jsessionid`对链接进行编码,开发者通常需要创建一个脚本片段(scriptlet)来处理请求参数。这种做法不仅增加了代码复杂度,还可能导致维护困难。为了解决这一问题,...
2. **SQL改写**:利用MyBatis的Interceptor接口,拦截Executor的query方法,对原始的SELECT语句进行改写,添加LIMIT和OFFSET子句。 3. **结果处理**:返回结果时,PageHelper会将结果包装成PageInfo对象,包含分页所...
- **union all改写成join**:减少不必要的数据复制。 - **大数据量时,怎样让全局count/sum distinct更快?**:使用`APPROX_COUNT_DISTINCT`替代`COUNT(DISTINCT)`。 - **有小表存在的情况下,看看能否使用mapjoin**...
- 对于可变集合,使用`Collections.unmodifiableList/Map/Set`返回不可修改视图。 - 避免在`equals()`方法中直接比较集合,应先判断大小再逐个元素比较。 6. **并发处理**: - 使用`synchronized`关键字时,确保...
SparkCL,是基于大数据中GPU运行的框架,他是在spark的基础的,对spark中的map以及reduce所进行的改进,也就是说,sparkCL通过自定义mapCL/ reduceCL改写transformation。 其中mapCL/ reduceCL 里自定义funcX函数,...