Как клонировать BlockingQueue в Java? - PullRequest
0 голосов
/ 05 июля 2018

В моем приложении Java у меня есть

BlockingQueue<HashMap<Integer, double[]>> q

Как мне его клонировать?

1 Ответ

0 голосов
/ 05 июля 2018
  1. Базовая копия : копия Queue

    BlockingQueue<HashMap<Integer, double[]>> q; // = ...
    BlockingQueue<HashMap<Integer, double[]>> copy = new LinkedBlockingDeque<>(q);
    

  1. Глубокая копия : копия Queue и Map

    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));
    }
    

  1. Очень глубокая копия : копия Queue, Map и double[] *

    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);
    }
    
...