java - 在 Java 中复制 map 对象

标签 java hashmap deep-copy

我尝试按照与 < How do I copy an object in Java? 相同的方式进行操作>.
但它不适用于 Map以下代码中的对象。我想把原始 map 数据复制到currMap .当前输出为

0
1
2
3
null
null
null


我希望它是

0
1
2
3
0
2
3


我在这里缺少什么?
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Queue;

class mapCopy{
    private Map<Character, Queue<Integer>> map;
    mapCopy(Map<Character, Queue<Integer>> map){
        this.map=map;
    }
    
    mapCopy(mapCopy mapcopy){
        this.map=mapcopy.map;
    }
    
    Map<Character, Queue<Integer>> getMap(){
        return this.map;
    }
}

public class Test {

    static Map<Character, Queue<Integer>> BuildMap(){
        String toMatch="able";
        Map<Character, Queue<Integer>> map = new HashMap<>();
        
        int i=0;
        for(var c:toMatch.toCharArray()) {
            Queue<Integer> q = map.get(c);
            if(q==null)
                q=new ArrayDeque<Integer>();
            
            q.add(i);
            map.put(c, q);          
            i++;
        }
        
        return map;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<Character, Queue<Integer>> map = BuildMap();
        
        List<String> dic = Arrays.asList("able", "ale");        
                        
        for(var d:dic) {
            var copy1 = new mapCopy(map);
            var copy2 = new mapCopy(copy1);
            
            var currMap = copy2.getMap();
            
            for(var c:d.toCharArray()) {        
                    System.out.println(currMap.get(c).poll());
            }
        }
    }

}
更新 1:
iota 的答案正是我所寻找的。下面是通过添加copyMap函数并将其添加到currMap中实现的实际代码(var currMap = copyMap(map);)
不需要类 mapCopy。
static Map<Character, Queue<Integer>> copyMap(Map<Character, Queue<Integer>> mapcopy){
    Map<Character, Queue<Integer>> map = new HashMap<>(mapcopy.size());
    mapcopy.forEach((k,v)->{
        map.put(k, new ArrayDeque<>(v));
    });
    
    return map;
}
更新 2:
添加完整代码
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Queue;

public class Test {

    static Map<Character, Queue<Integer>> BuildMap(){
        String toMatch="able";
        Map<Character, Queue<Integer>> map = new HashMap<>();
        
        int i=0;
        for(var c:toMatch.toCharArray()) {
            Queue<Integer> q = map.get(c);
            if(q==null)
                q=new ArrayDeque<Integer>();
            
            q.add(i);
            map.put(c, q);          
            i++;
        }
        
        return map;
    }
    
    static Map<Character, Queue<Integer>> copyMap(Map<Character, Queue<Integer>> mapcopy){
        Map<Character, Queue<Integer>> map = new HashMap<>(mapcopy.size());
        mapcopy.forEach((k,v)->{
            map.put(k, new ArrayDeque<>(v));
        });
        
        return map;
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<Character, Queue<Integer>> map = BuildMap();
        
        List<String> dic = Arrays.asList("able", "ale");        
                        
        for(var d:dic) {
            var currMap = copyMap(map);

            for(var c:d.toCharArray()) {        
                    System.out.println(currMap.get(c).poll());
            }
        }
    }
}

最佳答案

您可以遍历 Map直接将每个值复制到一个新的 Map 中.

mapCopy(mapCopy mapcopy){
    this.map = new HashMap<>(mapcopy.map.size());
    mapcopy.map.forEach((k,v)->{
        map.put(k, new ArrayDeque<>(v));
    });
}

关于java - 在 Java 中复制 map 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65515153/

相关文章:

java - 在 Java 中将字符串中括号内的值作为整数返回

c# - 在几个类中干燥 ICloneable 的实现

Java克隆浅拷贝深拷贝复制构造函数嵌套对象

java for循环第一个字符串的第一个字符然后是第二个字符串的最后一个字符

java - Hibernate注释异常: Use of @OneToMany or @ManyToMany targeting an unmapped class

java - 排序比较计数器

java - 如何在树集中搜索以查找大于或小于或不区分大小写的值?

java - 选择 Hazelcast 功能

Java像图一样遍历一个大的HashMap

python - 如何在Python中创建函数的独立副本?