1)HashMap.javaのコードを読み取る。762行目で、アノテーションは、サブクラスがこれをオーバーライドしてputメソッドの動作を変更することを示しています。ただし、関数void addEntry(int、K、V、int)はプライベート関数です。サブクラスでオーバーライドするにはどうすればよいですか?
/**
758 * Adds a new entry with the specified key, value and hash code to
759 * the specified bucket. It is the responsibility of this
760 * method to resize the table if appropriate.
761 *
762 * Subclass overrides this to alter the behavior of put method.
763 */
764 void addEntry(int hash, K key, V value, int bucketIndex) {
765 Entry<K,V> e = table[bucketIndex];
766 table[bucketIndex] = new Entry<>(hash, key, value, e);
767 if (size++ >= threshold)
768 resize(2 * table.length);
2)行746および753では、2つの関数recordAccessおよびrecordRemovalは空のままです。では、サブクラスはこれら2つの関数をどのようにオーバーライドできますか?
static class Entry<K,V> implements Map.Entry<K,V> {
688 final K key;
689 V value;
690 Entry<K,V> next;
691 final int hash;
...
/**
742 * This method is invoked whenever the value in an entry is
743 * overwritten by an invocation of put(k,v) for a key k that's already
744 * in the HashMap.
745 */
746 void recordAccess(HashMap<K,V> m) {
747 }
748
749 /**
750 * This method is invoked whenever the entry is
751 * removed from the table.
752 */
753 void recordRemoval(HashMap<K,V> m) {
754 }
755 }