- Но в Hashtables хранятся ключи, пары значений. Так как же это достигается?
Представьте себе структуру данных, подобную этой:
Node<K, V>[] table;
public static class Node<K, V> {
//voila! Key and Value stored here
private K key;
private V value;
//make it a linked list
private Node<K, V> next;
}
- Примеры ключей, пар значений показывают пример «Телефонного справочника», но не показывают, как они хранятся в массивах или связанном списке. Это просто Map.put (k, v) и Map.get (k). Хранилище связанных списков «One Data» и «Pointer» ... так как мы можем хранить ключи и значения в связанном списке (картинка может помочь в понимании)
Контрольная точка 1.
- Немного более практичный пример для Hash Table, чем map.put ("Rocket", 01111111111).
Вот, пожалуйста,
public class PersonIdentifier {
private final int id;
private final String ssn;
public PersonIdentifier(int id, String ssn) {
this.id = id;
this.ssn = ssn;
}
//getters, NO setters since fields are final...
//now the relevant methods!
@Override
public int hashCode() {
//available since Java 7...
return Objects.hash(id, ssn);
}
@Override
public boolean equals(Object o) {
if (o == null) return null;
if (this == o) return true;
if (!o.getClass().equals(this.getClass())) return false;
Person another = (Person)o;
return another.id == this.id && another.ssn.equals(this.ssn);
}
}
//...
Map<PersonIdentifier, Person> peopleMap = new HashMap<>();
peopleMap.put(new PersonIdentifier(1, "123456789"), new Person(/* fill with values like firstName, lastName, etc... */));
peopleMap.put(new PersonIdentifier(2, "987654321"), new Person(/* fill with values like firstName, lastName, etc... */));
//and on...