关于Map中的重复键

HashSet,TreeSet,LinkedHashSet都不允许元素有重复,如果有重复,则选取一个元素放入容器。同样,

HashMap,TreeMap,LinkedHashMap也不允许key有重复,但如果key重复,应该选取这个key对应的哪个值放入容器呢?做了一下测试:

public class Test {
   
    public static Map putSome(Map<String,String> map){

        map.put("gender", "Male");
        map.put("name", "Athor");
        map.put("name", "Cindy");
        map.put("name", "Billy");
        map.put("from","China");
        return map;
    }
   
    public static void main(String[] args) {

        System.out.println(putSome(new HashMap<String,String>()));
        System.out.println(putSome(new TreeMap<String,String>()));
        System.out.println(putSome(new LinkedHashMap<String,String>()));
    }

}

/* output result: */
{name=Billy, gender=Male, from=China}
{from=China, gender=Male, name=Billy}
{gender=Male, name=Billy, from=China}


可见不论是Map的哪个子类,键name对应的值都是Billy,即最后一个name的键值对,它覆盖了之前的name键值对。


如若转载,请说明出处!http://blog.csdn.net/xukunddp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 JavaScript 的 Set 结构来去除数组重复数据。 Set 是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。 例如,要去除数组 `[1, 2, 3, 1, 2]` 重复数据,可以这样写: ``` const arr = [1, 2, 3, 1, 2]; const unique = [...new Set(arr)]; // unique 现在是 [1, 2, 3] ``` 首先,将原数组转换为 Set 结构,然后使用扩展运算符(...)将 Set 转换回数组。 这样就可以得到一个新的数组,其包含了原数组的所有唯一值。 如果你想在 map 函数使用这个方法,可以这样写: ``` const arr = [1, 2, 3, 1, 2]; const unique = arr.map(x => x).filter((x, i, a) => a.indexOf(x) === i); // unique 现在是 [1, 2, 3] ``` 在 map 函数,我们使用了一个简单的转换函数,将每个元素映射为自身。然后,使用 filter 函数过滤掉重复的元素。这个方法基于 indexOf 函数,它返回给定元素在数组第一次出现的位置。如果这个位置与当前元素的位置相同,则表示当前元素是唯一的,需要保留。 ### 回答2: 要将重复的数据从Map移除,可以使用以下方法: 1. 创建一个新的Map对象,用于存储没有重复数据的键值对。 2. 遍历原始的Map对象,使用forEach方法来获取每个键值对。 3. 在遍历,检查新的Map对象是否已经存在相同。如果不存在,则将该键值对添加到新Map对象。 4. 最后,新的Map对象键值对即为去重后的数据。 下面是一个示例代码: ```javascript // 原始的Map对象 let map = new Map(); map.set(1, 'apple'); map.set(2, 'banana'); map.set(3, 'apple'); map.set(4, 'orange'); map.set(5, 'banana'); // 创建一个新的Map对象 let newMap = new Map(); // 遍历原始Map对象并将非重复数据添加到新的Map对象 map.forEach((value, key) => { if (!newMap.has(value)) { newMap.set(value, key); } }); // 输出去重后的数据 console.log(newMap); ``` 输出结果为: ``` Map { 'apple' => 1, 'banana' => 2, 'orange' => 4 } ``` 这样就成功地去除了原始Map重复数据。 ### 回答3: 在JavaScript,可以通过使用Set数据结构去除Map重复数据。 要去除Map重复数据,可以按照以下步骤进行操作: 1. 首先,将Map的所有值提取出来,并保存到一个数组。 2. 创建一个新的Set实例,并将上一步的数组作为Set的参数传入,Set会自动去除数组重复元素。 3. 将Set转换为数组,可以使用Array.from()函数或者扩展运算符(...)。 4. 最后,可以根据需要,将去重后的数组转换为Map等其他数据结构,或者进行其他操作。 以下是一个示例代码: ```javascript let map = new Map(); map.set('key1', 'value1'); map.set('key2', 'value2'); map.set('key3', 'value1'); // 有重复的value let valuesArray = Array.from(map.values()); // 将Map的value提取为数组 let uniqueValues = [...new Set(valuesArray)]; // 使用Set去除重复的value,并转换为数组 console.log(uniqueValues); ``` 在上述代码,valuesArray数组保存了Map的所有value,然后通过Set去除了其重复元素,并将结果转换为数组uniqueValues。 需要注意的是,Set是一种无序的数据结构,它会自动去除重复元素。如果在Map重复的value,Set去除重复元素后的顺序可能与原始Map的顺序不一致。如果顺序是很重要的,可以考虑使用其他的数据结构或自行编写去重函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值