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,如需转载请自行联系原作者

相关文章
|
16天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
38 2
|
2天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
2天前
|
存储 Java 开发者
Java 中 Set 类型的使用方法
【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。
|
2天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
2天前
|
Java 开发者
|
7天前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
10 1
|
14天前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
38 4
|
14天前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
36 3
|
14天前
|
存储 Java API
详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
【10月更文挑战第19天】深入剖析Java Map:不仅是高效存储键值对的数据结构,更是展现设计艺术的典范。本文从基本概念、设计艺术和使用技巧三个方面,详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
34 3
|
14天前
|
存储 缓存 安全
在Java的Map家族中,HashMap和TreeMap各具特色
【10月更文挑战第19天】在Java的Map家族中,HashMap和TreeMap各具特色。HashMap基于哈希表实现,提供O(1)时间复杂度的高效操作,适合性能要求高的场景;TreeMap基于红黑树,提供O(log n)时间复杂度的有序操作,适合需要排序和范围查询的场景。两者在不同需求下各有优势,选择时需根据具体应用场景权衡。
20 2