📜  如何在Java中克隆地图

📅  最后修改于: 2022-05-13 01:55:47.748000             🧑  作者: Mango

如何在Java中克隆地图

给定一张地图,任务是克隆该地图。

以下是在Java中克隆地图的 5 种不同方法。

例子:

{1=Geeks, 2=For, 3=Geeks}
  • 方法一:朴素的方法
    1. 为类映射创建一个对象。
    2. 使用 put() 方法将元素放入地图中。
    3. 再次为类映射创建另一个对象。
    4. 现在最后迭代地图并调用 put 方法克隆初始地图。

    下面是上述方法的实现:

    执行:

    // Program to clone a Map in Java
    // Naive Method
      
    import java.util.*;
      
    class GFG {
        public static void main(String[] args)
        {
            // Creating an object for class Map
            Map hash_Map
                = new HashMap();
      
            // putting elements into the map
            hash_Map.put(1, "Geeks");
            hash_Map.put(2, "For");
            hash_Map.put(3, "Geeks");
      
            // Creating a new object for
            // class Map to clone a map
            Map new_map
                = new HashMap();
      
            // using iterator
            for (Map.Entry entry : hash_Map.entrySet()) {
                new_map.put(entry.getKey(),
                            entry.getValue());
            }
      
            System.out.println(new_map);
        }
    }
    
    输出:
    {1=Geeks, 2=For, 3=Geeks}
    
  • 方法 2:使用 putAll()。
    1. 为类映射创建一个对象。
    2. 使用 put() 方法将元素放入地图中。
    3. 再次为类映射创建另一个对象。
    4. 现在最后使用 putAll() 方法克隆初始地图。

    下面是上述方法的实现:

    执行:

    // Program to clone a Map in Java
    // putAll Method
      
    import java.util.*;
      
    class GFG {
      
        public static void main(String[] args)
        {
            // Creating an object for class Map
            Map hash_Map
                = new HashMap();
      
            // Putting elements into the map
            hash_Map.put(1, "Geeks");
            hash_Map.put(2, "For");
            hash_Map.put(3, "Geeks");
      
            // Creating a new object
            // for class Map to clone a map
            Map new_map
                = new HashMap();
      
            // using putAll method
            new_map.putAll(hash_Map);
      
            System.out.println(new_map);
        }
    }
    
    输出:
    {1=Geeks, 2=For, 3=Geeks}
    
  • 方法3:复制构造函数。
    1. 为类映射创建一个对象。
    2. 使用 put() 方法将元素放入地图中。
    3. 再次为类映射创建另一个对象。
    4. 现在最后使用复制构造函数(它是一个特殊的构造函数,用于创建一个新对象作为现有对象的副本)来克隆初始映射。

    下面是上述方法的实现:

    执行:

    // Program to clone a Map in Java
    // Copy Constructor
      
    import java.util.*;
      
    class GFG {
      
        public static void main(String[] args)
        {
            // Creating an object for class Map
            Map hash_Map
                = new HashMap();
      
            // putting elements into the map
            hash_Map.put(1, "Geeks");
            hash_Map.put(2, "For");
            hash_Map.put(3, "Geeks");
      
            // Creating a new object
            // for class Map to clone a map
            Map new_map
                = new HashMap();
      
            new_map = new HashMap<>(hash_Map);
            System.out.println(new_map);
        }
    }
    
    输出:
    {1=Geeks, 2=For, 3=Geeks}
    
  • 方法 4: Java 8
    1. 为类映射创建一个对象。
    2. 使用 put() 方法将元素放入地图中。
    3. 再次为类映射创建另一个对象。
    4. 现在终于使用Java 8 中的 Stream API 来克隆初始地图。

    下面是上述方法的实现:

    执行:

    // Program to clone a Map in Java
    // Using java8
      
    import java.util.*;
    import java.util.stream.Collectors;
      
    class GFG {
      
        public static void main(String[] args)
        {
            // Creating an object for class Map
            Map hash_Map
                = new HashMap();
      
            // putting elements into the map
            hash_Map.put(1, "Geeks");
            hash_Map.put(2, "For");
            hash_Map.put(3, "Geeks");
      
            // Creating a new object
            // for class Map to clone a map
            Map new_map
                = new HashMap();
      
            new_map
                = hash_Map.entrySet()
                      .stream()
                      .collect(
                          Collectors
                              .toMap(Map.Entry::getKey,
                                     Map.Entry::getValue));
      
            System.out.println(new_map);
        }
    }
    
    输出:
    {1=Geeks, 2=For, 3=Geeks}
    

    说明:也和上面的方法类似,但是这里我们使用Java 8 的 Stream API 来克隆原始地图。

  • 方法五:JSON
    1. 为类映射创建一个对象。
    2. 使用 put() 方法将元素放入地图中。
    3. 再次为类映射创建另一个对象。
    4. 现在终于用谷歌的GSON库来克隆初始地图了。

    下面是上述方法的实现:

    执行:

    // Program to clone a Map in Java
    // JSON Method
      
    import java.util.*;
    import java.util.stream.Collectors;
    import com.google.gson.Gson;
      
    class GFG {
      
        public static void main(String[] args)
        {
            // Creating an object for class Map
            Map hash_Map
                = new HashMap();
      
            // putting elements into the map
            hash_Map.put(1, "Geeks");
            hash_Map.put(2, "For");
            hash_Map.put(3, "Geeks");
      
            // Creating a new object
            // for class Map to clone a map
            Map new_map
                = new HashMap();
            Gson gson = new Gson();
      
            String jsonString = gson.toJson(hash_Map);
      
            new_map = gson.fromJson(jsonString, Map.class);
      
            System.out.println(new_map);
        }
    }
    
    输出:
    {1=Geeks, 2=For, 3=Geeks}
    

    说明:也和上面的方法类似,但是这里我们使用谷歌的GSON库来克隆原始地图。在这里,我们最初将 Map 转换为 JSON字符串,然后将该字符串转换为新地图。