如何在Java中克隆BlockingQueue?

Emp*_*yee 0 java queue clone java-8

在我的Java应用程序中我有

BlockingQueue<HashMap<Integer, double[]>> q
Run Code Online (Sandbox Code Playgroud)

我该如何克隆它?

azr*_*zro 7

  1. 基本副本:副本Queue

    BlockingQueue<HashMap<Integer, double[]>> q; // = ...
    BlockingQueue<HashMap<Integer, double[]>> copy = new LinkedBlockingDeque<>(q);
    
    Run Code Online (Sandbox Code Playgroud)

  1. 深副本:副本QueueMap

    BlockingQueue<HashMap<Integer, double[]>> q; // = ...
    BlockingQueue<HashMap<Integer, double[]>> copy = new LinkedBlockingDeque<>();//or other
    
    for(HashMap<Integer, double[]> map : q){
        copy.add(new HashMap<>(map));
    }
    
    Run Code Online (Sandbox Code Playgroud)

  1. 非常深的副本:副本Queue,Map's和double[]'s

    BlockingQueue<HashMap<Integer, double[]>> q; // = ...
    BlockingQueue<HashMap<Integer, double[]>> copy = new LinkedBlockingDeque<>();//or other
    
    for(HashMap<Integer, double[]> map : q){
        Map<Integer, double[]> mapCopy = new HashMap<>();
        for(Map.Entry<Integer, double[]> entry : map.entrySet()){
            double[] array = entry.getValue();
            mapCopy.put(entry.getKey(), Arrays.copyOf(array, array.length));
        }
        copy.add(mapCopy);
    }
    
    Run Code Online (Sandbox Code Playgroud)