Home > Back-end >  What is the actual instance we get for a Map?
What is the actual instance we get for a Map?

Time:02-18

If I create a Map like this

Map<String, dynamic> map = Map<String, dynamic>();

In Documentation it says, It returns LinkedHashMap

  /// Creates an empty [LinkedHashMap].
  ///
  /// This constructor is equivalent to the non-const map literal `<K,V>{}`.
  ///
  /// A `LinkedHashMap` requires the keys to implement compatible
  /// `operator==` and `hashCode`.
  /// It iterates in key insertion order.
  external factory Map();

And the LinkedHashMap also an abstract class, we cannot create object for abstract class in dart.

abstract class LinkedHashMap<K, V> implements Map<K, V> {
  /// Creates an insertion-ordered hash-table based [Map].
  ///

What is the actual instance we get in Map Constructor? I am using the dart version 2.16.1 latest stable

CodePudding user response:

The Map default constructor is a factory constructor that makes a LinkedHashMap using its default constructor. The LinkedHashMap default constructor is also a factory constructor, and it makes an object of one of a few internal classes:

  • _InternalLinkedHashMap
  • _CompactLinkedIdentityHashMap
  • _CompactLinkedCustomHashMap

As for which one it chooses, that's based on what kind of equals, hashCode, and isValidKey methods were provided. For your case of calling Map(), it's going to be the first one, _InternalLinkedHashMap.

Source code

Here is the latest version (as of today) of the classes and constructors I mentioned:

CodePudding user response:

What is the actual instance we get in Map Constructor?

The answer is LinkedHashMap. It's a concrete class, not an abstract class.

See LinkedHashMap.

The other example of the implementers of Map is HashMap.

  • Related