code: public int[][] toArray() {
          int[][] res = new int[14][];
          int size = 0;
          for (int[] map : this) {
              if (size == res.length)
                  res = Arrays.copyOf(res, size + (size >> 1));
              res[size++] = map.clone();
          }
          return Arrays.copyOf(res, size);
      }
docs: Mappings are lazily generated and best used in a loop. However if all
  mappings are required this method can provide a fixed size array of
  mappings.
  
  <blockquote><pre>
  
  IAtomContainer query  = ...;
  IAtomContainer target = ...;
  
  Pattern pat = Pattern.findSubstructure(query);
  
  // lazily iterator
  for (int[] mapping : pat.matchAll(target)) {
  // logic...
  }
  
  int[][] mappings = pat.matchAll(target)
  .toArray();
  
  // same as lazy iterator but we now can refer to and parse 'mappings'
  // to other methods without regenerating the graph match
  for (int[] mapping : mappings) {
  // logic...
  }
  </pre></blockquote>
  
  The method can be used in combination with other modifiers.
  
  <blockquote><pre>
  
  IAtomContainer query  = ...;
  IAtomContainer target = ...;
  
  Pattern pat = Pattern.findSubstructure(query);
  
  // array of the first 5 unique atom mappings
  int[][] mappings = pat.matchAll(target)
  .uniqueAtoms()
  .limit(5)
  .toArray();
  </pre></blockquote>
  
  @return array of mappings