我正在尝试编写一个程序来删除单词列表中的重复键值对。
然而,允许添加具有不同值的重复键。
哪种Java集合可以解决这种情况?
- key1 aaaa
- key2 bbbb
- key3 cccc
- key4 dddd
- key2 bbbb - 重复对 - 不允许
- key1 hhhh - 重复键 - 允许
- key5 gggg
- key2 nnnn
我正在尝试编写一个程序来删除单词列表中的重复键值对。
然而,允许添加具有不同值的重复键。
哪种Java集合可以解决这种情况?
public class MultiValueMap<K,V>
{
private final Map<K,Set<V>> mappings = new HashMap<K,Set<V>>();
public Set<V> getValues(K key)
{
return mappings.get(key);
}
public Boolean putValue(K key, V value)
{
Set<V> target = mappings.get(key);
if(target == null)
{
target = new HashSet<V>();
mappings.put(key,target);
}
return target.add(value);
}
}
您不能通过Java集合实现此操作。
您可以使用Multimap,它支持重复的键,但也支持重复的键值对。
对于您来说,最好的解决方案是使用Multimap,并检查该值是否已存在,如果存在,则不添加它。
Map<K, List<V>>
,它是一个包含每个键对应值列表的映射。 arr[2]=5 ; arr[7]=5;
哈希表也可以存储重复的值,但键必须是唯一的:
Adam{age}=21;
Bill{age}=21;
一些编程语言使用点来表示属性:
Adam.age=21;
你的情况基本上需要一个HashMap。
只需在HashMap中将键作为键,值作为值即可。
这是因为键总是唯一的,如果值发生冲突,则HashMap维护链表以存储所有这些冲突值。如果任何值与链接列表中的任何早期值相同,则它将简单地用新值替换旧值。
例如:
根据您的要求:
Key1 aaaa--应该被存储 Key1 bbbb--应该被存储 Key1 aaaa--不应存储,因为它是重复的。
因此,哈希映射将针对“key1”存储“aaaa”和“bbbb”值。
后来,当我们再次尝试将“aaaa”存储在“key1”中时,先前存储的值“aaaa”将被简单地替换。
因此,哈希映射自动处理值的重复性。
因此,在你的情况下,你可以使用HashMap。
HashMap
不会在同一个键下存储重复的值 - 每个键只能有一个条目;如果您添加具有相同键的另一个条目,则该条目将被替换。如果要存储给定键的所有条目,则值必须是一个集合,您需要将其添加到其中;这使得维护变得更加复杂。 - simonalexander2005