如何在TwoWayHashMap中实现put()方法?

时间:2015-11-22 23:53:36

标签: java hashmap put two-way

我必须在一个带有String键和两个String值的文件中读入双向hashmap。如何实现put()方法以将键和值添加到hashmap中?

经过数小时的研究,我只找到了一个使用前进后退的例子。

backward.put(value, key);
return forward.put(key, value)

不幸的是,它只是给了我 null 。非常感谢任何指导。

这是课程。我不希望你们为我做任务。我只需要帮助实现put()方法......就是这样。我只需要在正确的方向上做一些指导。

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

@SuppressWarnings("serial")
public class TwoWayHashMap<K, V> extends HashMap<K, V> 
{
// Declare all the data members and instance variables
// that are required for this class

/** 
 * Construct an empty two-way hash map.
 */
public TwoWayHashMap() 
{
    // Provide your definition/implementation of this constructor
}

/** 
 *  Construct a two-way hash map with the given hash map, which must have a
 *  one-to-one relationship between elements.
 *
 *  @param map The hash map.
 */
public TwoWayHashMap(Map<? extends K, ? extends V> map) 
{
    // Provide your definition/implementation of this constructor
}

/** 
 *  Construct an empty two-way hash map with an initial capacity.
 *
 *  @param initialCapacity The initial capacity.
 */
public TwoWayHashMap(int initialCapacity) 
{
    // Provide your definition/implementation of this constructor
}

/** 
 *  Construct an empty two-way hash map with an initial capacity and a load
 *  factor.
 *
 *   @param initialCapacity The initial capacity.
 *   @param loadFactor The load factor.
 */
public TwoWayHashMap(int initialCapacity, float loadFactor) 
{
    // Provide your definition/implementation of this constructor
}


/** 
 *  Clear this two-way hash map.
 */
@Override
public void clear() 
{
    // Provide your definition/implementation of this method
}

/** 
 *  Clone this two-way hash map and return the clone.
 *
 *  @return The clone.
 */
@Override
public Object clone() 
{
    // Provide your definition/implementation of this method
}

/** 
 *  Test whether this two-way hash map contains the given value.
 *
 *  @param value The value.
 *  @return true if the value is contained.
 */
@Override
public boolean containsValue(Object value) 
{
    // Provide your definition/implementation of this method
}

/** 
 *  Given a value, return the corresponding key in this two-way hash map.
 *
 *  @param value The value.
 *  @return the key.
 */
public K getKey(Object value) 
{
    // Provide your definition/implementation of this method
}

/** 
 *  Put a value into this two-way hash map and associate it with a key.
 *
 *  @param key The key.
 *  @param value The value.
 *  @return The value previously associated with the key in this two-way
 *   hash map.
 */
@Override
public V put(K key, V value) 
{
    // Provide your definition/implementation of this method
}

/** 
 *  Remove the value associated with the given key.
 *
 *  @param key The key.
 *  @return The removed value, or null if not found.
 */
@Override
public V remove(Object key) 
{
    // Provide your definition/implementation of this method
}

/**
 *  Returns the inverse view of this TwoWayHashMap, which maps each 
 *  of this TwoWayHashMap's values to its associated key.
 * 
 *  @return the inverse view of this TwoWayHashMap
 */
public HashMap<V, K> inverse()
{
    // Provide your definition/implementation of this method
}

/** 
 *  Return a set containing all the values in this two-way hash map.
 *
 *  @return The set.
 */
@Override
public Set<V> values() 
{
    // Provide your definition/implementation of this method
}

/**
 * Return a string representation of this object
 *
 * @return The string object
 */
@Override
public String toString() 
{   
    // Provide your definition/implementation of this method
}

}

2 个答案:

答案 0 :(得分:1)

你是在正确的轨道上,但看起来你正在尝试做一个put和一个get in相同的操作。 put方法返回map中的现有值,当你调用forward.put()时,该值不存在 - 你不需要注意这里返回的值。在填充地图后,您将使用get()方法。

public void add(Object key, Object value) {
    forward.put(key, value);
    backward.put(value, key);
}

public Object getForward(Object key) {
    return forward.get(key);
}

public Object getBackward(Object key) {
    return backward.get(key);
}

map put()返回现有值的事实仅适用于您实际想知道在替换之前存在什么值的特殊情况。它并不常用,也不是你需要的。

答案 1 :(得分:0)

你看过番石榴https://code.google.com/p/guava-libraries/了吗?我强烈建议考虑使用这个库作为替代方案,它由谷歌推出,并有很多其他很酷的东西。如果你真的想要自己推出,那么你仍然可以查看此课程https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/AbstractBiMap.java?spec=svn7178ea3850dddda7acdf8f5709984764d2ae87d8&name=refs/remotes/origin/release12&r=7178ea3850dddda7acdf8f5709984764d2ae87d8中的putInBothMaps()方法