/** * This will replace the value at the index give. * * @param i the index of the value, must be in the range [0, size() - 1] * @param value The new value you want to set for this index. * @return previous value */ public V setValue(int i, V value) { V prev = value(i); store[capacity + i] = value; return prev; }
@Override public int hashCode() { int h = 0; for (int i = 0; i < used; i++) { h += key(i).hashCode(); V v = value(i); if (v != null) { h += v.hashCode(); } } return h; }
/** * Obtain the value for a specific key. * * @return the value for a key, or null if not found * @param key the key **/ public V get(Object key) { int index = getIndexOfKey(key); return (index != -1) ? value(index) : null; }
@Override public boolean equals(Object o) { if (! (o instanceof Hashlet) ) return false; Hashlet<?, ?> rhs = (Hashlet<?, ?>) o; if (used != rhs.used) return false; for (int i = 0; i < used; i++) { int bi = rhs.getIndexOfKey(key(i)); if (bi == -1) return false; Object a = value(i); Object b = rhs.value(bi); boolean equal = (a == null) ? b == null : a.equals(b); if ( !equal ) return false; } return true; } }
public FieldValue setValue(FieldValue value) { if (value == null) { throw new NullPointerException("Null values in Struct not supported, use removeFieldValue() to remove value instead."); } int index = values.getIndexOfKey(id); FieldValue retVal = null; if (index == -1) { values.put(id, value); invalidateOrder(); } else { retVal = values.value(index); values.setValue(index, value); } return retVal; }
@Override public Struct clone() { Struct struct = (Struct) super.clone(); struct.values = new Hashlet<>(); struct.values.reserve(values.size()); for (int i = 0; i < values.size(); i++) { struct.values.put(values.key(i), values.value(i).clone()); } return struct; }
@Override public FieldValue removeFieldValue(Field field) { FieldValue found = values.get(field.getId()); if (found != null) { Hashlet<Integer, FieldValue> copy = new Hashlet<>(); copy.reserve(values.size() - 1); for (int i=0; i < values.size(); i++) { if (values.key(i) != field.getId()) { copy.put(values.key(i), values.value(i)); } } values = copy; invalidateOrder(); } return found; }