void grow() {
		int newCapacity = (int) Math.round(this.size() * 1.7) + 7;
		nextIndex = 0;
		modificationNumber++;
		if ((this.size() * 13) > (capacity * 9)) {
			Edge[] newEdges = new Edge[newCapacity];
			Edge[] newPreviousEdgeWithSameFrom = new Edge[newCapacity];
			Edge[] newPreviousEdgeWithSameTo = new Edge[newCapacity];
			Edge[] newNextEdgeWithSameFrom = new Edge[newCapacity];
			Edge[] newNextEdgeWithSameTo = new Edge[newCapacity];

			for (int i = 0; i < capacity; i++) {
				if (edges[i] != null) {
					newEdges[nextIndex] = edges[i];
					newPreviousEdgeWithSameFrom[nextIndex] = previousEdgeWithSameFrom[i];
					newPreviousEdgeWithSameTo[nextIndex] = previousEdgeWithSameTo[i];
					newNextEdgeWithSameFrom[nextIndex] = nextEdgeWithSameFrom[i];
					newNextEdgeWithSameTo[nextIndex] = nextEdgeWithSameTo[i];
					this.edgeIndices.remove(edges[i].key());
					this.edgeIndices.put(edges[i].key(), nextIndex);
					nextIndex++;
				}
			}
			capacity = newCapacity;
			edges = newEdges;
			previousEdgeWithSameFrom = newPreviousEdgeWithSameFrom;
			previousEdgeWithSameTo = newPreviousEdgeWithSameTo;
			nextEdgeWithSameFrom = newNextEdgeWithSameFrom;
			nextEdgeWithSameTo = newNextEdgeWithSameTo;
		}
		else // just tighten
		{
			tighten();
		}
	}
Either compacts the edge set by removing vacant positions if there are
	  many or grows the edge set so that there is additional space.
Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/EdgeSet.java