class StringNumberer extends ArrayNumberer<NumberedString> {

  private final Map<String, NumberedString> stringToNumbered = new HashMap<String, NumberedString>(1024);

  public synchronized NumberedString findOrAdd(String s) {<FILL_FUNCTION_BODY>}

  public NumberedString find(String s) {
    return stringToNumbered.get(s);
  }
}

    NumberedString ret = stringToNumbered.get(s);
    if (ret == null) {
      ret = new NumberedString(s);
      stringToNumbered.put(s, ret);
      add(ret);
    }
    return ret;
  
<methods>public void <init>() ,public void <init>(soot.util.NumberedString[]) ,public synchronized void add(soot.util.NumberedString) ,public long get(soot.util.NumberedString) ,public soot.util.NumberedString get(long) ,public Iterator<soot.util.NumberedString> iterator() ,public boolean remove(soot.util.NumberedString) ,public int size() <variables>protected java.util.BitSet freeNumbers,protected int lastNumber,protected soot.util.NumberedString[] numberToObj