keySet()和entrySet()的区别?

1 个回答

  • 比比东
    我一路种下蘑菇,只为让你知道回家的路。
    `keySet()` 和 `entrySet()` 都是 `Map` 接口里用来遍历的方式,但用途、效率、返回类型不同。 **1. 返回内容不同** * `keySet()`:返回 `Set<K>`,包含所有 key。 * `entrySet()`:返回 `Set<Map.Entry<K,V>>`,包含 key 和 value 的映射关系。 **2. 遍历效率不同** * 如果只需要 key,用 `keySet()`; * 如果需要同时用到 key 和 value,用 `entrySet()` **更高效**,因为 `keySet()` 在拿到 value 时需要额外 `map.get(key)` 查一次,而 `entrySet()` 直接从 `Entry` 对象拿到 value,避免二次查找。 **3. 修改集合的影响** * `keySet()` 返回的集合是 Map 视图,修改它会影响原 Map(删除 key 会删除对应 entry)。 * `entrySet()` 也是视图,修改 entry 的 value 会同步到 Map。 **4. 示例** ```java Map<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); // keySet 遍历(取 value 会多一次查找) for (String key : map.keySet()) { System.out.println(key + "=" + map.get(key)); } // entrySet 遍历(一次就能拿到 key 和 value) for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + "=" + entry.getValue()); } ``` **5. 结论** * **只要 key** → 用 `keySet()`。 * **需要 key + value** → 用 `entrySet()`,性能更好。
    发布于 2025-08-13 10:19 •IP属地 内蒙古
    举报
    评论
    收藏