рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВред HashMap

рдореИрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рд╣реЗрдмреНрд░рд┐рдЯрд╛рдЪреЗрдЯреЗрд▓реА!

рдореИрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдкрд┐рдЫрд▓реЗ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ArrayList рдФрд░ LinkedList рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЖрдЬ рд╣рдо рдЬрд╢рдкрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред



рд╣реИрд╢рдкреИрдб - рд╣реИрд╢ рдЯреЗрдмрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдХреБрдВрдЬреА / рдорд╛рди рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ)ред рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрд╢рдХреНрдд рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЯрдХрд░рд╛рд╡ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд╛рдЗрдирд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рд╡рд╕реНрддреБ рдирд┐рд░реНрдорд╛рдг


Map<String, String> hashmap = new HashMap<String, String>(); 

Footprint{Objects=2, References=20, Primitives=[int x 3, float]}
Object size: 120 bytes


рдирд╡-рдирд┐рд░реНрдорд┐рдд рд╣реИрд╢рдореИрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ:
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдЙрддреНрддреАрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдореВрд▓реНрдп рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдЧрдд рдЧреБрдгреЛрдВ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рд╢рдмреНрдж рдореЗрдВ, рдХреБрдЫ рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред

 //     // capacity -     16 table = new Entry[capacity]; 



рдЖрдк HashMap (рдХреНрд╖рдорддрд╛) рдФрд░ HashMap (рдХреНрд╖рдорддрд╛, loadFactor) рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛ рдФрд░ рд▓реЛрдб рдХрд╛рд░рдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдзрд┐рдХрддрдо рдХреНрд╖рдорддрд╛ рдЗрдВрдЯ (1073741824) рдХрд╛ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдЖрдзрд╛ рд╣реИред


рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛


 hashmap.put("0", "zero"); 

Footprint{Objects=7, References=25, Primitives=[int x 10, char x 5, float]}
Object size: 232 bytes


рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЪрд░рдгреЛрдВ рдХрд╛ рдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдВрдЬреА рдирд▓ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рд╣реИред рдпрджрд┐ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рд╣реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ putForNullKey (рдорд╛рди) рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╢реВрдиреНрдп рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ)ред

  2. рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдХреБрдВрдЬреА-рдЖрдзрд╛рд░рд┐рдд рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП, рд╣реИрд╢ (рд╣реИрд╢рдХреЛрдб) рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ key.hashCode () рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ ред

     static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); } 

    рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП - рд╣реИрд╢ (рдХреБрдВрдЬреА) рд╡рд┐рдзрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реИрд╢ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯрдХрд░рд╛рд╡ рд╣реЛрдВрдЧреЗ (рд▓рдЧрднрдЧ 8, рд▓реЛрдб рдХрд╛рд░рдХ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде)ред

    рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, '`0' рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП , рд╣реИрд╢рдХреЛрдб () рд╡рд┐рдзрд┐ 48 рд▓реМрдЯрд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк:

     h ^ (h >>> 20) ^ (h >>> 12) = 48 h ^ (h >>> 7) ^ (h >>> 4) = 51 


  3. рдЗрдВрдбреЗрдХреНрд╕рдлреЛрд░ (рд╣реИрд╢, рдЯреЗрдмрд▓ рд▓реИрдВрде) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рдПрд░реЗ рдореЗрдВ рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рддрддреНрд╡ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

     static int indexFor(int h, int length) { return h & (length - 1); } 

    51 рдХреЗ рд╣реИрд╢ рдорд╛рди рдФрд░ 16 рдХреЗ рдПрдХ рдЯреЗрдмрд▓ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рд░рдгреА рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

     h & (length - 1) = 3 


  4. рдЕрдм, рд╕рд░рдгреА рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕ рд╕реЗрд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА (рд╢реНрд░реГрдВрдЦрд▓рд╛) рдорд┐рд▓рддреА рд╣реИред рдирдП рддрддреНрд╡ рдХреЗ рд╣реИрд╢ рдФрд░ рдХреБрдВрдЬреА рдХреА рддреБрд▓рдирд╛ рд╕реВрдЪреА рд╕реЗ рддрддреНрд╡реЛрдВ рдХреА рд╣реИрд╢ рдФрд░ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░, рдпрджрд┐ рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рддрддреНрд╡ рдХрд╛ рдорд╛рди рдУрд╡рд░рд░рд╛рдЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

     if (e.hash == hash && (e.key == key || key.equals(e.key))) { V oldValue = e.value; e.value = value; return oldValue; } 


  5. рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдХреЛрдИ рдорд┐рд▓рд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП addEntry (рд╣реИрд╢, рдХреА, рд╡реИрд▓реНрдпреВ, рдЗрдВрдбреЗрдХреНрд╕) рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

     void addEntry(int hash, K key, V value, int index) { Entry<K, V> e = table[index]; table[index] = new Entry<K, V>(hash, key, value, e); ... } 




рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рд╛рд╢рдк рдХреИрд╕реЗ рднрд░рддрд╛ рд╣реИ, рд╣рдо рдХреБрдЫ рдФрд░ рддрддреНрд╡ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


 hashmap.put("key", "one"); 

Footprint{Objects=12, References=30, Primitives=[int x 17, char x 11, float]}
Object size: 352 bytes


  1. рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдХреБрдВрдЬреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ

  2. '' рдХреА ''ред рд╣реИрд╢рдХреЛрдб () = 106079

     h ^ (h >>> 20) ^ (h >>> 12) = 106054 h ^ (h >>> 7) ^ (h >>> 4) = 99486 

  3. рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛

     h & (length - 1) = 14 

  4. рдХреЛрдИ рд╕рдорд╛рди рдЖрдЗрдЯрдо рдирд╣реАрдВ рдорд┐рд▓рд╛

  5. рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ





 hashmap.put(null, null); 

Footprint{Objects=13, References=33, Primitives=[int x 18, char x 11, float]}
Object size: 376 bytes


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдирд▓ рдХреЛ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрд▓рдЧ рд╣реЛрдВрдЧреАред PutForNullKey (рдорд╛рди) рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рд╣реИрд╢ () рдФрд░ рдЗрдВрдбреЗрдХреНрд╕рдлрд╝реЛрд░ () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЕрд╢рдХреНрдд рдХреБрдВрдЬрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рддрд╛рд▓рд┐рдХрд╛ [0] рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдРрд╕реА рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ:
  1. рддрд╛рд▓рд┐рдХрд╛ [0] рд╕реЗ рдмрдВрдзреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдирд▓ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорд╛рди рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реИред

  2. рдпрджрд┐ рдирд▓ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рддрддреНрд╡ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдкрд░рд┐рдЪрд┐рдд addEntry () рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

     addEntry(0, null, value, 0); 





 hashmap.put("idx", "two"); 

Footprint{Objects=18, References=38, Primitives=[int x 25, char x 17, float]}
Object size: 496 bytes


рдЕрдм рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрдм рдХреЛрдИ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЯрдХрд░рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред
  1. рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдХреБрдВрдЬреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ

  2. '' рдЖрдИрдбреАрдПрдХреНрд╕ ''ред рд╣реИрд╢рдХреЛрдб () = 104125

     h ^ (h >>> 20) ^ (h >>> 12) = 104100 h ^ (h >>> 7) ^ (h >>> 4) = 101603 

  3. рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛

     h & (length - 1) = 3 

  4. рдХреЛрдИ рд╕рдорд╛рди рдЖрдЗрдЯрдо рдирд╣реАрдВ рдорд┐рд▓рд╛

  5. рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ

     //  table[3]       ["0", "zero"] Entry<K, V> e = table[index]; //       table[index] = new Entry<K, V>(hash, key, value, e); 




рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ


рдЬрдм рддрд╛рд▓рд┐рдХрд╛ [] рд╕рд░рдгреА рдХреЛ рд╕реАрдорд╛ рдорд╛рди рд╕реЗ рднрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рджреЛрдЧреБрдирд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдХрд╛рд░ (рдХреНрд╖рдорддрд╛) рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг (newTable) рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред

 void resize(int newCapacity) { if (table.length == MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return; } Entry[] newTable = new Entry[newCapacity]; transfer(newTable); table = newTable; threshold = (int)(newCapacity * loadFactor); } 

рд╡рд░реНрддрдорд╛рди рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг () рд╡рд┐рдзрд┐ рдкреБрди: рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдЕрдкрдиреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ (рдирдП рдЖрдХрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП) рдХреЛ рдкреБрди: рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдирдП рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХрд╛ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдХрд░рддреА рд╣реИред

рдпрджрд┐ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ, рдПрдХ рдФрд░ 15 рддрддреНрд╡реЛрдВ рдХреЛ рдореВрд▓ рд╣реИрд╢рдореИрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА рдФрд░ рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред





рдЖрдЗрдЯрдо рд╣рдЯрд╛рдПрдВ


HashMap рдХреЗ рдкрд╛рд╕ ArrayList рдХреЗ рд╕рдорд╛рди "рд╕рдорд╕реНрдпрд╛" рд╣реИ - рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░, рддрд╛рд▓рд┐рдХрд╛ [] рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ ArrayList рдореЗрдВ trimToSize () рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ HashMap рдореЗрдВ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░реЗ рдПрдХ рд╕рд╣рдпреЛрдЧреА рдиреЗ рдХрд╣рд╛, " рд╢рд╛рдпрдж рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ? ")ред

рдКрдкрд░ рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рдгред рд╕реНрд░реЛрдд рд╡рд╕реНрддреБ 496 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 150 рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред

Footprint{Objects=768, References=1028, Primitives=[int x 1075, char x 2201, float]}
Object size: 21064 bytes


рдЕрдм рд╕рдорд╛рди 150 рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рд╕реЗ рдорд╛рдкреЗрдВред

Footprint{Objects=18, References=278, Primitives=[int x 25, char x 17, float]}
Object size: 1456 bytes


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдХрд╛рд░ рдЕрдкрдиреЗ рдореВрд▓ рдЖрдХрд╛рд░ рдХреЗ рдХрд░реАрдм рднреА рдирд╣реАрдВ рдерд╛ред рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ / рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HashMap (рдореИрдк) рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 hashmap = new HashMap<String, String>(hashmap); 

Footprint{Objects=18, References=38, Primitives=[int x 25, char x 17, float]}
Object size: 496 bytes



iterators


рд╣реИрд╢рдкреЙрдк рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ рд╣реИрдВ , рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рд╕рднреА рдХреБрдВрдЬреА рдХреАрд╕реЗрдЯ () , рд╕рднреА рдорд╛рди () рдпрд╛ рд╕рднреА рдХреБрдВрдЬреА / рдорд╛рди рдЬреЛрдбрд╝реЗ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдиреАрдЪреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рджрд┐рдП рдЧрдП рд╣реИрдВ:

 // 1. for (Map.Entry<String, String> entry: hashmap.entrySet()) System.out.println(entry.getKey() + " = " + entry.getValue()); // 2. for (String key: hashmap.keySet()) System.out.println(hashmap.get(key)); // 3. Iterator<Map.Entry<String, String>> itr = hashmap.entrySet().iterator(); while (itr.hasNext()) System.out.println(itr.next()); 

рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрдЯрд░реЗрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рд╣рд╛рд╢рдк рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдЯрд░реЗрдЯрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛), рддреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдорд╛рдирдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛрдЧрд╛ред


рдкрд░рд┐рдгрд╛рдо


- рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рдУ (1) рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирдП рддрддреНрд╡реЛрдВ рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп O (1) рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдФрд╕рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп ╬Ш (1 + ╬▒) рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ ╬▒ рд▓реЛрдб рдлреИрдХреНрдЯрд░ рд╣реИред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд░рдирдЯрд╛рдЗрдо worst (n) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рд╣реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рддрддреНрд╡);
- рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрд╢рдХреНрдд рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╡рд░рдг рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВред


рд╕рдВрджрд░реНрдн


HashMap рд╕реНрд░реЛрдд
JDK7 рд╕реЗ HashMap рд╕реНрд░реЛрдд
JDK рдХреЗ рд╕реНрд░реЛрдд OpenJDK рдФрд░ рд╡реНрдпрд╛рдкрд╛рд░ 6 рд╕реНрд░реЛрдд рд░рд┐рд▓реАрдЬрд╝ - рдмрд┐рд▓реНрдб b23

рдорд╛рдк рдЙрдкрдХрд░рдг - рд╕реНрдореГрддрд┐-рдорд╛рдкрдХ рдФрд░ рдЕрдорд░реВрдж (Google рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп)ред

Source: https://habr.com/ru/post/In128017/


All Articles