code: public void put(char []key, int length, int value)
    {
      if (key == null)
        return;
  
      int hash = hash(key, length) & _mask;
  
      while (true) {
        char []testKey = _keys[hash];
  
        if (testKey == null || equals(testKey, key, length)) {
          _keys[hash] = new char[length];
  
          for (int i = length - 1; i >= 0; i--) {
            char ch = key[i];
  
            if ('A' <= ch && ch <= 'Z')
              ch += 'a' - 'A';
  
            _keys[hash][i] = ch;
          }
  
          _values[hash] = value;
  
          _size++;
  
          if (_keys.length <= 4 * _size)
            resize(2 * _keys.length);
  
          return;
        }
        else if (key != testKey && ! testKey.equals(key)) {
          hash = (hash + 1) & _mask;
          continue;
        }
        else {
          _values[hash] = value;
  
          return;
        }
      }
    }
docs: Puts a new value in the property table with the appropriate flags