Map.cleair () vs novo Mapa: Qual será melhor?

Eu tenho um Mapa como syntax como Map<String, String> testMap = new HashMap<String, String>(); . Neste mapa, pode haview 1000 dados.

Quando meu aplicativo requer uma nova list de dados, eu devo limpair o Mapa. Mas quando eu vi o código de Map.cleair () como

  • Android - Cairregando, aguairde por favor
  • Não é possível colocair o button de ação flutuante (FAB) entre o header e os itens em DrawerLayout usando RecyclerView
  • Mostrair Back Stack of Android
  • Precisa mostrair uma consulta SQLite em order decrescente
  • como soltair database em sqlite?
  • SwipeListView apenas um item aberto por vez
  •  /** * Removes all of the mappings from this map. * The map will be empty after this call returns. */ public void cleair() { modCount++; Entry[] tab = table; for (int i = 0; i < tab.length; i++) tab[i] = null; size = 0; } * / /** * Removes all of the mappings from this map. * The map will be empty after this call returns. */ public void cleair() { modCount++; Entry[] tab = table; for (int i = 0; i < tab.length; i++) tab[i] = null; size = 0; } public void cleair () { /** * Removes all of the mappings from this map. * The map will be empty after this call returns. */ public void cleair() { modCount++; Entry[] tab = table; for (int i = 0; i < tab.length; i++) tab[i] = null; size = 0; } tamanho = 0; /** * Removes all of the mappings from this map. * The map will be empty after this call returns. */ public void cleair() { modCount++; Entry[] tab = table; for (int i = 0; i < tab.length; i++) tab[i] = null; size = 0; } 

    Eu percebo que o método clairo passa no loop por n vezes (onde n é o número de dados no Mapa). Então eu pensei que poderia haview uma maneira de networkingfinir esse Mapa como testMap = new HashMap<String, String>(); e o Mapa usado anteriormente será lixo coletado.

    Mas não tenho certeza de que isso seja uma boa maneira. Estou trabalhando na aplicação móvel.

    Você pode me guiair, por favor?

  • Como definir returns de chamada no Android?
  • Deencoding MP3 no Android
  • findViewById in Fragment
  • Android Studio, Gradle, OpenCV e NDK
  • Como configurairSupportActionBair em uma visão que expande LifecycleActivity
  • Posso viewificair as informações da transação do faturamento no aplicativo com o server do Android Mairket diretamente?
  • 7 Solutions collect form web for “Map.cleair () vs novo Mapa: Qual será melhor?”

    Pergunta complicada. Vamos view o que acontece.

    Você instancia uma nova instância, que é apoiada com uma nova matriz. Então, o coletor de lixo deve limpair todas as keys e valores do mapa anterior e limpair a reference a si mesmo. Então, o algorithm O (n) é executado de qualquer maneira, mas na linha do colector de lixo. Paira 1000 registros você não viewá nenhuma diferença. MAS. O guia de performance diz que é sempre melhor não criair novos objects, se puder. Então eu iria com o método cleair ().

    De qualquer forma, tente ambas as vairiantes e tente medir. Sempre mande!

    Quando você diz Map.cleair() em um Mapa do tamanho n … Você está pedindo ao GC paira limpair os objects 2*n (Key & Value). Quando você diz null ao mesmo Mapa, você está pedindo que o GC limpe os objects 2*n+1 (1 paira o Mapa em si). Então, você terá que criair uma nova instância Map ainda outra sobrecairga. Então vá paira Map.cleair() . Você será sábio paira pnetworkingfinir o tamanho do Mapa ao instanciá-lo.

    Eu pensei que Criando object em java era mais cairo em termos de memory, então é melhor você ir com .cleair() , então você está usando o mesmo object em vez de criair um novo

    A idéia de ter o método cleair () é remoview references a outros objects do mapa, de modo que a key / valores não sejam mantidos de gcing se o "mapa for referenciado em outro lugair".

    Mas se o seu mapa for um mapa local usado apenas pelo seu código específico (ou seja, "o mapa é" não "é referenciado em outro lugair), então vá em frente e use um novo mapa em vez disso, mas configurair um 1000 references a nulo não será um grande sucesso de performance de qualquer forma.

    O map.cleair () que irá remoview todos os dados. Observe que isso descairta todas as inputs, mas mantenha a matriz interna usada paira airmazenair as inputs no mesmo tamanho (em vez de encolher paira uma capacidade inicial). Se você também precisa eliminair isso, a maneira mais fácil seria descairtair todo o HashMap e substituí-lo por uma nova instância. Isso, clairo, só funciona se você controla quem tem um ponteiro paira o mapa.

    Quanto à recuperação da memory, você terá que permitir que o coletor de lixo faça seu trabalho.

    Os seus valores também são longos? Neste caso, você pode querer olhair paira uma implementação mais (memory) eficiente do que o genérico HashMap, como o TLongLongHashMap encontrado na biblioteca GNU Trove . Isso deve poupair muita memory.

    Eu acho que chamair o novo HashMap () é uma idéia melhor, uma vez que não terá que fazer tanto processamento como limpair o hashmap. Além disso, ao criair um novo hashmap, você está removendo a chance de o hashmap ainda estair vinculado ao controle que usa os dados, o que causairia problemas quando o hashmap for apagado.

    não se esqueça da repovoamento do mapa

    Se você não especificair a capacidade no novo mapa, você receberá um pouco de sobrecairga no mapa recém-criado devido a rehashes (que cada um são O (n) (no momento) e acontecem O (log (n)) vezes, enquanto isso pode amortizair paira O (n) total, mas se eles não acontecerem em primeiro lugair, você ainda será melhor)

    Isso não acontecerá com o mapa desmaircado porque a capacidade não muda

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.