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

 

 本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/4214803.html,如需转载请自行联系原作者

相关文章
|
6天前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
15天前
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
23 6
【数据结构】map&set详解
|
4天前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
15 5
|
22天前
|
Java C# Swift
Java Stream中peek和map不为人知的秘密
本文通过一个Java Stream中的示例,探讨了`peek`方法在流式处理中的应用及其潜在问题。首先介绍了`peek`的基本定义与使用,并通过代码展示了其如何在流中对每个元素进行操作而不返回结果。接着讨论了`peek`作为中间操作的懒执行特性,强调了如果没有终端操作则不会执行的问题。文章指出,在某些情况下使用`peek`可能比`map`更简洁,但也需注意其懒执行带来的影响。
Java Stream中peek和map不为人知的秘密
|
7天前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
17 5
|
7天前
|
存储 JavaScript 前端开发
js的map和set |21
js的map和set |21
|
7天前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
6天前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
14天前
|
监控 Java 数据库
Java程序如何进行不停机更新?
Java程序如何进行不停机更新?
16 1
|
1月前
|
缓存 监控 安全
如何提高 Java 高并发程序的性能?
以下是提升Java高并发程序性能的方法:优化线程池设置,减少锁竞争,使用读写锁和无锁数据结构。利用缓存减少重复计算和数据库查询,并优化数据库操作,采用连接池和分库分表策略。应用异步处理,选择合适的数据结构如`ConcurrentHashMap`。复用对象和资源,使用工具监控性能并定期审查代码,遵循良好编程规范。
下一篇
无影云桌面