Sobes.tech
Junior — Middle

Кадом истифодаи калидҳои тағйирёбанда дар коллексияҳои додаҳо чӣ оқибатҳо метавонад ба вуҷуд ояд?

sobes.tech AI

Ҷавоб аз AI

Истифодаи калидҳои тағйирёбанда (mutable) дар коллексияҳои додаҳо, монанди HashMap ё HashSet дар Java, метавонад ба мушкилоти ҷиддӣ оварда расонад. Сабаби асосӣ ин аст, ки калидҳо бояд номутобиқ бошанд, то ки кодҳои хеш ва баробарӣ доимӣ боқӣ монад.

Агар калид пас аз илова кардан ба коллексия тағйир ёбад:

  • Код хеши калид метавонад тағйир ёбад, ва коллексия наметавонад унсури бо ин калидро пайдо кунад.
  • Ин ба "қатъ" кардани унсур оварда мерасонад: он дар структура мемонад, аммо дастрасӣ ба он имконнопазир мешавад.
  • Тамомияти додаҳо ва кори дурустии коллексия вайрон мешавад.

Масалан:

Map<List<String>, String> map = new HashMap<>();
List<String> калид = new ArrayList<>();
калид.add("initial");
map.put(калид, "қимат");

// Тағйир додани калид пас аз илова
калид.add("тағйирёбанда");

// кӯшиши гирифтани қимат бо калид кор намекунад
String қимат = map.get(калид); // null

Аз ин рӯ, тавсия дода мешавад, ки объектҳои номутобиқ ҳамчун калидҳо истифода шаванд, масалан, сатрҳо, рақамҳо ё синфҳои махсуси номутобиқ.