【问题标题】:How to remove duplicates from Hashmap of type HashMap<String, Object>?如何从 HashMap<String, Object> 类型的 Hashmap 中删除重复项?
【发布时间】:2025-12-27 19:05:13
【问题描述】:

我有&lt;String, Object&gt; 类型的haspmap。此哈希图包含重复项。我正在尝试以下方法来删除重复项。但它显示一个错误。请找到下面的代码和错误。

这是包含数据的原始哈希图。

Map<String , Object> map = new HashMap<String , Object>();

我正在尝试将值添加到集合中。

Set<String> valueSet = new HashSet<String>(map.values());

map.values() 中显示一个错误,指出无法解析构造函数 hashset(java.util.collection)

在此之后,我将添加以下代码以消除重复项。

Iterator<String> it = valueSet.iterator();

        Map<Integer , String> uniqueMap = new HashMap<Integer , String>();

        while(it.hasNext()){
            String value = it.next();

            for(Entry<Integer , String> e : map.entrySet()){
                if(value.equals(e.getValue())  && !uniqueMap.containsValue(value)){
                    uniqueMap.put(e.getKey(), value);
                }
            }
        }

但由于错误,我无法继续进行。你能帮我解决我做错的地方吗?谢谢。

【问题讨论】:

  • A Map 不能有重复的键,但可能有重复的值。如果您想要/需要同时拥有唯一键和值/您可以使用 Google Guava 库中的 BiMap 或使用此算法:1)创建一个新地图,2)为原始地图中的每个键/值对,存储它们在新映射中使用值作为键,键作为值 3)将新映射中的值存储回旧映射中

标签: java android hashmap


【解决方案1】:

这个:

Map<String , Object> map = new HashMap<String , Object>();
Set<String> valueSet = new HashSet<String>(map.values());

不起作用,因为 map.values() 返回 Collection&lt;Object&gt; 并且该集合的类型为 String

试试这个:

Map<String , Object> map = new HashMap<String , Object>();
Set<Object> valueSet = new HashSet<Object>(map.values());    

或者:

Map<String , String> map = new HashMap<String , String>();
Set<String> valueSet = new HashSet<String>(map.values());  

@coders 回应您的评论,如果您有地图列表并且想要创建一组此地图的唯一值,您可以这样做:

ArrayList<HashMap<String, Object>> mDataList = new ArrayList<HashMap<String, Object>>();
Set<Object> valueSet = new HashSet<Object>();  
for(HashMap<String, Object> map : mDataList){
    valuesSet.addAll(map.values());
}

【讨论】:

  • 你好@Titus,如何遍历 hashmap 的列表来消除重复项。例如:ArrayList> mDataList = new ArrayList>();
  • @coders 你所说的重复是什么意思?具有相同条目的映射或具有相同键或相同值的多个映射?
  • 谢谢,但是如何在 for 循环中添加 this( map : mDataList)。这不正确吧?
  • @coders 是一个错字,它的开头有一个 &lt;,不应该在那里。
【解决方案2】:

Hasmap 不能存储重复的键。

【讨论】: