我试图编写程序来删除单词列表的重复键值对。但是,如果密钥以不同的值复制,则应允许该记录添加。请帮助我了解哪种java集合可以解决这种情况。
答案 0 :(得分:3)
您可以使用multimap执行此操作,使用set作为值的集合,这非常简单。
以下是一些实现的基础知识,而不是整个事情,但无法想象您需要的不仅仅是或者可能需要删除方法
修改
刚刚看到你想要丢弃重复对,可以使用一组来做,而不是抛出错误只是给了bool来显示它是否已经存在(如果它存在则返回false)
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);
}
}
答案 1 :(得分:2)
你无法通过Java集合来实现它。
您可以使用Multimap支持重复键,但它也支持重复键和值对。
最佳解决方案是使用Multimap并检查值是否已存在,然后不要添加它。
答案 2 :(得分:1)
据我所知,默认JRE中没有这样的集合实现。但是,third party libraries中似乎有实现。
要获得类似的内容,您可以使用Map<K, List<V>>
,这是一个包含每个键值列表的地图。
但是,我认为你不需要这个。要合并重复键的值,您可以在将新键值对放入地图之前检查该键是否已存在。
答案 3 :(得分:1)
自Guava 2.0以来,你可以使用一种新的地图类型,即SetMultimap,我认为它完全适合你的目的。它允许重复键,但不允许重复键/值对。请参阅Guava documentation。
答案 4 :(得分:-1)
字典包含单词和定义,因此sheep =“wooly mammal”是一个有效的作业。 每次你抬头看羊都会变成毛茸茸的哺乳动物。
数组由整数索引,并且可以具有重复值
arr[2]=5 ; arr[7]=5;
散列也可以存储重复值,但键必须是唯一的:
Adam{age}=21;
Bill{age}=21;
有些语言使用点作为属性:
Adam.age=21;
答案 5 :(得分:-2)
您的案例基本上需要一个HashMap。
只需将key作为键和值作为值放在HashMap中。
这是因为key将以任何方式唯一,并且如果值中存在冲突,HashMap会维护一个链接列表,用于存储所有这些冲突值。如果任何值与链接列表中的任何早期值相同,则只需替换新的一个。
对于前。
根据您的要求:
Key1 aaaa - 应存储 Key1 bbbb - 应该存储 Key1 aaaa - 不应存储,因为它是重复的。
因此,基本上hashmap会将“aaaa”和“bbbb”值存储为“key1”作为键。 之后当我们尝试再次对“key1”存储“aaaa”时,旧的存储值“aaaa”将被简单地替换。
因此,重复的值由hashmap自动处理。
因此,您可以在您的案例中使用HashMap。