Имеется объект типа Entry со своими полями где хранятся ключ (Long) и значение (String) и ссылка на следующий объект этого же типа. Эти объекты в свою очередь находятся в массиве (Entry[] table), в общем реализация аналогичная HashMap. Верно ли реализован метод получения ключа по значению? Как бы вы его сами реализовали?
public Long getKey(String value) {
if(value == null){
return 0L;
}
for (Entry table : table) {
for (Entry e = table; e != null; e = e.next)
if (value.equals(e.value))
return e.getKey();
}
return null;
}
UPD, вот код класса возможно будет понятнее:
public class MyCustomHashMap implements MyInterface {
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
Entry[] table = new Entry[DEFAULT_INITIAL_CAPACITY];
int size;
int threshold = (int) (DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
float loadFactor = DEFAULT_LOAD_FACTOR;
int hash(Long key) {
return key.hashCode();
}
int indexFor(int hash, int length) {
return hash & (length - 1);
}
Entry getEntry(Long key) {
int hash = (key == null) ? 0 : hash(key);
for (Entry entry = table[indexFor(hash, table.length)]; entry != null; entry = entry.next) {
Long k;
if (entry.hash == hash && ((k = entry.key) == key || (key != null && key.equals(k))))
return entry;
}
return null;
}
void resize(int newCapacity) {
Entry[] newTable = new Entry[newCapacity];
transfer(newTable);
table = newTable;
threshold = (int) (newCapacity * loadFactor);
}
void transfer(Entry[] newTable) {
Entry[] src = table;
int newCapacity = newTable.length;
for (int j = 0; j < src.length; j++) {
Entry e = src[j];
if (e != null) {
src[j] = null;
do {
Entry next = e.next;
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
}
void addEntry(int hash, Long key, String value, int bucketIndex) {
Entry e = table[bucketIndex];
table[bucketIndex] = new Entry(hash, key, value, e);
if (size++ >= threshold) {
resize(2 * table.length);
}
}
void createEntry(int hash, Long key, String value, int bucketIndex) {
Entry e = table[bucketIndex];
table[bucketIndex] = new Entry(hash, key, value, e);
size++;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Сам не первый год пишу на java, но лишь в рамках хобби, с многопоточностью приходится не так часто работать
Есть ListView с множественным выбором,в 1 элемент которого входит к примеру - ингридиент для рецептовКак мне реализовать поиск по моей бд в firebase...