𝗠𝗮𝘀𝘁𝗲𝗿 𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀

زیادہ تر ڈویلپرز ArrayList یا HashSet کا استعمال کرتے ہیں۔ یہ سادہ کاموں کے لیے تو ٹھیک ہے، لیکن جب آپ کو رفتار یا پیمانے (scale) کی ضرورت ہو تو یہ ناکام ہو جاتا ہے۔

میں نے ایک بار ایک سادہ ArrayList کا استعمال کرتے ہوئے گیم لیڈر بورڈ بنایا تھا۔ جب بھی اسکور تبدیل ہوتا، میں اسے دوبارہ ترتیب (sort) دیتا تھا۔ اس سے UI مسلسل فریز ہو جاتا تھا۔ میں زبان کا استعمال کرنے کے بجائے اس سے لڑ رہا تھا۔

غلط ٹولز کا استعمال بند کریں۔ تیز رفتار اور بہتر کوڈ لکھنے کے لیے ان تین مخصوص collections کا استعمال کریں۔

  1. Enum Constants کے لیے EnumSet

اگر آپ enums کے لیے HashSet استعمال کرتے ہیں، تو آپ کو کارکردگی (performance) کی قیمت چکانی پڑتی ہے۔ ہر insertion enum کو ایک object میں تبدیل کر دیتا ہے، جس سے غیر ضروری بوجھ (overhead) بڑھ جاتا ہے۔

EnumSet ایک bit vector استعمال کرتا ہے۔ یہ صرف ایک CPU instruction کے ذریعے چیک کرتا ہے۔

Before: Set<Ability> abilities = new HashSet<>(); abilities.add(Ability.FIRE);

After: EnumSet<Ability> abilities = EnumSet.of(Ability.FIRE);

  1. Range Queries کے لیے NavigableSet

کسی رینج کو تلاش کرنے کے لیے ترتیب شدہ لسٹ (sorted list) میں دستی طور پر لوپ چلانا سست ہے اور غلطیوں کا باعث بن سکتا ہے۔ اکثر آپ کو off-by-one بگ کا سامنا کرنا پڑتا ہے۔

NavigableSet آپ کے ڈیٹا کو خود بخود ترتیب میں رکھتا ہے۔ یہ subsets کے لیے O(log n) lookups فراہم کرتا ہے۔

Before: Collections.sort(scores); List<Integer> topTen = scores.subList(size - 10, size);

After: NavigableSet<Integer> scores = new TreeSet<>(Comparator.reverseOrder()); scores.add(1542); NavigableSet<Integer> topTen = scores.headSet(scores.first(), true).stream().limit(10).collect(Collectors.toCollection(TreeSet::new));

  1. Read-Heavy Lists کے لیے CopyOnWriteArrayList

ArrayList پر synchronized blocks کا استعمال ہر read کو سست کر دیتا ہے۔ اگر ایک thread لکھ رہا ہو اور دوسرا پڑھ رہا ہو، تو یہ ConcurrentModificationException کا باعث بھی بنتا ہے۔

CopyOnWriteArrayList ہر write پر array کی ایک نئی کاپی بناتا ہے۔ Readers array کے ایک snapshot کو دیکھتے ہیں۔

Before: List<String> log = Collections.synchronizedList(new ArrayList<>()); // Iterating here can crash if a writer joins in.

After: CopyOnWriteArrayList<String> log = new CopyOnWriteArrayList<>(); // Iteration is safe and never crashes.

ہمیشہ ایک ہی دو کلیکشنز (collections) کا انتخاب کرنا بند کریں۔ ایسا ٹول منتخب کریں جو آپ کے ڈیٹا کے پیٹرن (data pattern) کے مطابق ہو۔

ماخذ: https://dev.to/timevolt/the-java-collections-force-mastering-the-hidden-gems-like-a-jedi-4438