2017-08-21 2 views
0

Je suis tombé sur un morceau de code où j'ai trouvéQue fait le constructeur HashMap (Map m)?

public class MapImpl { 
    private static MapImpl mpl = new MapImpl(); 
    Map<String,String> hm; 
    private MapImpl() { 
      hm = new HashMap<>(); 
     } 
    public addContentsToMap(Map<String,String> m){ 
     this.hm=m; 
    } 
    public Map returnMap(){ 
     new HashMap<>(hm); 
     } 
    } 

Je voudrais savoir ici que lorsque le constructeur par défaut est appelé la carte est initialisée à hashmap, et quand addContentsToMap est appelé une carte est formé avec des valeurs .

Je vois que le returnMap utilise le constructeur de la HashMap (Map m). J'ai parcouru le code source de HashMap mais j'étais complètement désemparé.

+1

Construit une nouvelle HashMap avec les mêmes mappages que la carte spécifiée. La HashMap est créée avec un facteur de charge par défaut (0,75) et une capacité initiale suffisante pour contenir les mappages dans la carte spécifiée. –

+7

Avez-vous recherché [les javadocs] (https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#HashMap-java.util.Map-)? Je ne suis pas sûr de ce que tu n'es pas clair. – yshavit

+0

https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#HashMap(java.util.Map) –

Répondre

3

Il prend toute implémentation de l'interface Map et construit un HashMap qui est également une implémentation de l'interface Map.

développeurs comme Hash-Collections (HashSet, HashMap etc.), y compris HashMap parce qu'ils fournissent devraient O(1) obtenir et contient le temps.

Il peut être utile, une fois que vous avez un Map qui n'est pas HashMap (par exemple Properties) et vous savez que ce sera grand et vous lire plusieurs fois, il est utile de passer à une autre implémentation d'un Map.

Documentation:

public HashMap(Map<? extends K,? extends V> m)

construit un nouveau HashMap avec les mêmes applications que la carte spécifiée. La HashMap est créée avec un facteur de charge par défaut (0,75) et une capacité initiale suffisante pour contenir les mappages dans la carte spécifiée.

Paramètres:

m - le plan dont les correspondances sont à placer dans ce plan

Génère:

NullPointerException - si la carte spécifiée est null

+0

N'est-ce pas l'heure de lecture de 'O (1)'? – xander

+0

@xander Bien sûr, il est: D – xenteros

+0

@yshavit c'est parce que c'est un concept de programmation générale - dans l'écriture technique, vous devez toujours utiliser une police technique pour de telles choses. – xenteros