这两个怎么变成一个 java 泛型 hashmap map

这两个怎么变成一个

  public static void replaceValues(List<Map<String, String>> list,  List<Document>mappingConf) {
//        List<Document>mappingConf;
        for (Document document : mappingConf) {
            String fromVal = document.getString(k.fromVal);
            String toVal = document.getString(k.toVal);
            replaceValues(list, fromVal, toVal);
        }
    }
    
    public static void replaceValuesHashMap(List<HashMap<String, Object>> list, List<Document>mappingConf) {
//        List<Document>mappingConf;
        for (Document document : mappingConf) {
            String fromVal = document.getString(k.fromVal);
            String toVal = document.getString(k.toVal);
            replaceValuesHashMap(list, fromVal, toVal);
        }
    }
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7690796
  • 这篇博客也不错, 你可以看下java的hashmap用法
  • 除此之外, 这篇博客: 面试必会系列 - 1.1 Java SE 基础中的 HashMap 有什么特点? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • JDK8 之前底层实现是数组 + 链表,JDK8 改为数组 + 链表/红黑树,节点类型从Entry 变更为 Node。主要成员变量包括存储数据的 table 数组、元素数量 size、加载因子 loadFactor。

    table 数组记录 HashMap 的数据,每个下标对应一条链表,所有哈希冲突的数据都会被存放到同一条链表,Node/Entry 节点包含四个成员变量:key、value、next 指针和 hash 值。

    HashMap 中数据以键值对的形式存在,键对应的 hash 值用来计算数组下标,如果两个元素 key 的 hash 值一样,就会发生哈希冲突,被放到同一个链表上,为使查询效率尽可能高,键的 hash 值要尽可能分散。

    HashMap 默认初始化容量为 16,扩容容量必须是 2 的幂次方、最大容量为 1<< 30 、默认加载因子为 0.75。

  • 您还可以看一下 唐世林老师的Java面试题精选集锦课程中的 【Java基础】HashMap底层结构是怎么样子的?小节, 巩固相关知识点

可以将这两个方法合并为一个使用泛型的方法。你可以将参数中的List<Map<String, String>>和List<HashMap<String, Object>>替换为List>,这样就可以适用于不同类型的Map。

下面是合并后的方法示例:


```java
public static void replaceValues(List<? extends Map<String, ?>> list, List<Document> mappingConf) {
    for (Document document : mappingConf) {
        String fromVal = document.getString(k.fromVal);
        String toVal = document.getString(k.toVal);
        replaceValues(list, fromVal, toVal);
    }
}

private static <T extends Map<String, ?>> void replaceValues(List<T> list, String fromVal, String toVal) {
    for (T map : list) {
        // 处理替换逻辑
        // 使用 map.put(key, value) 进行值替换
    }
}



```
在合并后的方法中,我们使用了通配符? extends Map<String, ?>来表示接受任意类型的Map,其中?代表通配符,extends表示限制类型的上界。这样,你可以传递List<Map<String, String>>或List<HashMap<String, Object>>作为参数。

注意,在合并后的方法中,我们还引入了一个私有的辅助方法replaceValues,它使用泛型类型<T extends Map<String, ?>>来表示接受任意类型的Map,并在其中进行值的替换操作。

通过使用泛型,你可以更加通用地处理不同类型的Map,提高代码的可复用性和灵活性。