"Pensando em Java" 4ª edição P519 Página Página FrawHashmap Capítulo Notas de leitura
O fracashashmap é usado para salvar a referência fraca, uma estrutura chamada Yunxun Garbage Collector limpa automaticamente as teclas e os valores.
Ao adicionar teclas e valores, o mapeamento as envolverá automaticamente com a referência fraca.
Veja o código fonte do JDK,
public V PUT (K Key, V Valor) {Objeto K = MaskNull (key); int H = Hash (k); Entrada <K, V> [] Tab = getTable (); int i = indexfor (h, tab.length); para (entrada <k, v> e = tab [i]; e! = e.Value; if (value! = OldValue) e.Value = Value; retorna OldValue;}} modCount ++; entrada <k, v> e = tab [i]; tab [i] = nova entrada <> (k, valor, fila, h, e); if (++ size> = limhold) REIDIMENTO (TAB.LUTLULT * 2); A new Entry<>(k, value, queue, h, e) usa ReferenceQueue
/ ** * Fila de referência para centrifes fracos limpos */ Private Final ReferenceQueue <Object> fila = new ReferenceQueue <> ();
Clique no construtor da new Entry , digite o nível superior de super para ver.
/** * Cria uma nova referência fraca que se refere ao objeto especificado e é * registrado na fila fornecida. * * @Param Reference Object A nova referência fraca se referirá a * @param q a fila com a qual a referência deve ser registrada, * ou <tt> null </tt> se o registro não for necessário */ public frAchaReference (re referência, referênciaqueue <? super t> q) {super (q); } Aqui, new Entry também constrói um objeto fraco de defesa
teste:
pacote com.anialy.test.data_structure.map; importar java.util.iterator; importar java.util.weakhashmap; public class fracwhashmapTest {public static void main (string [] args) {fracashashmap wmap = new fracwHashMap <, string) (]; i = 0; wmap.keyset (). iterator (); while (iter.hasnext ()) {system.out.println (wmap.get (iter.next ());}}}}Pode -se esperar que, em parte, uma vez que a String [] mantém referências fracas, as saídas são todas intervalos 3.
O exposto acima é todo o conteúdo deste artigo sobre a análise da instância do FrawHashmap da programação Java, espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!