• 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课》 李刚。

  • 相关阅读:
    ArcGIS Server TileLayer 跨域读取
    dojo.declare 未定义
    注册部署SOE, 提交SOE只能在IE浏览器中
    在maptalks中加载三维模型obj,fbx,glb
    三维模型 obj 转化为 three Json 文件格式
    leaflet map 地图初始化不能铺满div
    查找进行的过程中被停止 解决办法
    逆向的第一个小代码
    编码不规范导致的错误
    android4.4.2 短信广播变更
  • 原文地址:https://www.cnblogs.com/haore147/p/4214803.html
Copyright © 2020-2023  润新知