JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ CopyOnWriteArraySet ڪيئن استعمال ڪجي مثال سان (ترج...
Lam-lam
سطح

جاوا ۾ CopyOnWriteArraySet ڪيئن استعمال ڪجي مثال سان (ترجمو)

گروپ ۾ شايع ٿيل
CopyOnWriteArraySetهي ڪلاس جو ننڍو ڀاءُ آهي CopyOnWriteArrayList. اهي JDK 1.5 ۾ شامل ڪيل طبقن جو هڪ خاص سيٽ آهن انهن جي وڌيڪ مشهور ڪزن سان گڏ ConcurrentHashMap. اهي حصو آهن concurrent collection framework۽ پيڪيج ۾ واقع آهن java.util.concurrent. جاوا ۾ CopyOnWriteArraySet ڪيئن استعمال ڪجي مثال سان (ترجمو) - 1CopyOnWriteArraySetبهترين موزون صرف پڙهڻ لاءِ گڏ ڪيل مجموعن لاءِ جيڪي سائيز ۾ ڪافي ننڍا آهن نقل ڪرڻ جي صورت ۾ جيڪڏهن ڪجهه ترميمي عمل ٿين. مثال طور، توھان استعمال ڪري سگھوٿا CopyOnWriteArraySetھڪڙي اعتراض کي ذخيرو ڪرڻ لاءِ جڏھن ايپليڪيشن شروع ٿئي، ۽ ڪيترن ئي ٻين موضوعن تائين رسائي حاصل ڪري سگھوٿا ان اعتراض کي ايپليڪيشن جي سڄي زندگي دوران. جيڪڏهن هن وقت ۾ ڪا نئين رياست يا شئي اچي ٿي، ته اها به ٿي سگهي ٿي هن ۾ شامل ڪئي وڃي Set، نئين سر ٺاهڻ جي قيمت تي. ڄاڻڻ لاءِ سڀ کان اهم شين مان هڪ CopyOnWriteArraySetاهو آهي ته اهو استعمال ڪيو ويو آهي CopyOnWriteArrayList. هن جو مطلب آهي ته اهو CopyOnWriteArraySetپڻ سڀني بنيادي ملڪيتن کي حصيداري ڪري ٿو CopyOnWriteArrayList. ياد رکڻ لاءِ هڪ ٻي اهم شيءِ اها آهي ته هن مجموعي جي ڪلاس جا آئٽرٽر سپورٽ نٿا ڪن remove(). انضمام جي دوران هڪ عنصر کي هٽائڻ جي ڪوشش جي نتيجي ۾ ٻاهر نڪرندو UnsupportedOperationException. اهو عمل دوران رفتار کي يقيني بڻائڻ لاء ڪيو ويو آهي. هڪ آئٽرٽر استعمال ڪندي هن عمل درآمد کي تيز ڪرڻ Setبلڪل تيز آهي ۽ ٻين موضوعن جي مداخلت کان بچي ٿو. هلائڻ لاءِ، آئٽرٽر ان صف جي سنيپ شاٽ تي ڀاڙين ٿا جيڪو ورتو ويو هو جڏهن آئيٽرٽر ٺاهيو ويو هو. مختصر ۾، استعمال ڪريو CopyOnWriteArraySetجيڪڏھن اھو setنقل ڪرڻ لاءِ ڪافي ننڍو آھي جڏھن شيون شامل ڪرڻ، ترتيب ڏيڻ، يا حذف ڪرڻ وقت، ۽ بنيادي مقصد آھي وقتي طور تي اپڊيٽ ٿيل ڊيٽا کي پڙھڻ. پڻ، جيڪڏھن توھان چاھيو ٿا ختم ڪرڻ جي دوران عناصر، ھن عمل درآمد کي استعمال نه ڪريو ڇو ته ان جو ريٽٽر سپورٽ نٿو ڪري remove()، ۽ اڇلائي ٿو java.lang.UnsupportedOperationException، جيئن ھيٺ ڏيکاريل آھي:
[RAJ] Event received : FOUR
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(Unknown Source)
    at Publisher.notifySubs(HelloHP.java:43)
    at HelloHP.main(HelloHP.java:23)

CopyOnWriteArraySet مثال جاوا ۾

هتي هڪ تيار ڪيل جاوا پروگرام آهي جيڪو ڏيکاري ٿو ته ڪيئن استعمال ڪجي CopyOnWriteArraySet. اسان جي مثال ۾، اسان پبلشر- subscriber نموني استعمال ڪيو ان جي استعمال کي ڏيکارڻ لاء. ايپليڪيشن جي لانچ دوران اڪثر رڪنيت حاصل ڪئي وئي آهي ۽ پبلشر جو بنيادي ڪم انهن کي ڳڻڻ ۽ انهن کي ڪنهن به تازه ڪاري جي اطلاع ڏيڻ آهي. رڪنيت جو اضافو ۽ حذف ٿي سگھي ٿو وقت بوقت. جيئن ته اسان کي هڪ تيز بائي پاس جي ضرورت آهي، CopyOnWriteArraySetاهو هڪ سٺو انتخاب آهي، خاص طور تي گهڻن موضوعن واري ماحول ۾ جتي هڪ ٿريڊ سبسڪرائبر شامل ڪري سگهي ٿو جڏهن ته ٻيو ٿريڊ اپڊيٽ سنڀاليندو آهي.
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * Java program to demonstrate how to use CopyOnWriteArraySet in Java. Remember,
 * CopyOnWriteArraySet doesn't support remove() operation.
 *
 * @author Javin Paul
 */
public class CopyOnWriteArraySetDemo{

    public static void main(String args[]) {
        Publisher cricNext = new Publisher();

        SubScriber raj = new SubScriber("RAJ");
        SubScriber adom = new SubScriber("ADOM");

        cricNext.addSubscriber(raj);
        cricNext.addSubscriber(adom);

        cricNext.notifySubs("FOUR");
        cricNext.notifySubs("SIX");

    }

}

class Publisher {

    private CopyOnWriteArraySet setOfSubs = new CopyOnWriteArraySet();

    public void addSubscriber(SubScriber sub) {
        setOfSubs.add(sub);
    }

    public void notifySubs(String score) {
        Iterator itr = setOfSubs.iterator();
        while (itr.hasNext()) {
            SubScriber sub = itr.next();
            sub.receive(score);

            //itr.remove(); // not allowed, throws UnsupportedOperationException
        }
    }
}

class SubScriber {

    private String _name;

    public SubScriber(String name) {
        this._name = name;
    }

    public void receive(String score) {
        System.out.printf("[%s] Event received : %s %n", _name, score);
    }
}
پيداوار:
[RAJ] Event received : FOUR
[ADOM] Event received : FOUR
[RAJ] Event received : SIX
[ADOM]Event received : SIX

ڇا ياد ڪجي

CopyOnWriteArraySetCollection۽ انٽرفيس کي لاڳو ڪري ٿو Set، انهي سان گڏ، JDK 1.5 ۾ شامل ڪيو ويو، Set'a، EnumSet. اهو پڻ Setهڪ آهي جيڪو CopyOnWriteArrayListپنهنجي سڀني عملن لاء اندروني استعمال ڪري ٿو. اهڙيء طرح، هن طبقي جي ساڳئي بنيادي ملڪيتن کي حصيداري ڪري ٿو. جيئن ته اهو نه آهي SortedSet، عناصر جي ترتيب جي ضمانت نه آهي تکرار دوران. جاوا ۾ CopyOnWriteArraySet ڪيئن استعمال ڪجي مثال سان (ترجمو) - 2
  1. CopyOnWriteArraySetايپليڪيشنن لاءِ بهترين مناسب جتي:

    • Setجي سائيز ننڍي رھندا آھن.
    • آپريشنز read-onlyخاص طور تي عملن کان بھترين آھن جيڪي شيون تبديل ڪن ٿيون.
    • توهان کي traversal دوران سلسلي جي وچ ۾ مداخلت کي روڪڻ گهرجي Set.
  2. ٻيو فائدو CopyOnWriteArraySetڌاڳو حفاظت آهي. هي مجموعو مطابقت جي حمايت ڪري ٿو.
  3. ميوٽيٽيڪل آپريشن (شامل ڪرڻ، تبديل ڪرڻ، حذف ڪرڻ، وغيره) قيمتي هوندا آهن ڇاڪاڻ ته اهي عام طور تي پوري بنيادي صف کي نقل ڪرڻ جي ضرورت هونديون آهن.
  4. آئيٽرٽر ميوٽيٽيڪل ڊليٽ آپريشن کي سپورٽ نٿا ڪن.
  5. هڪ آئٽرٽر استعمال ڪندي ٽرورسل تمام تيز آهي ۽ ان دوران ٻين موضوعن جي مداخلت کي خارج ڪيو ويو آهي. هلائڻ لاءِ، آئٽرٽر ان صف جي سنيپ شاٽ تي ڀروسو ڪن ٿا جيڪو ورتو ويو هو جڏهن آئيٽرٽر ٺاهيو ويو هو.
اهو سڀ ڪجهه CopyOnWriteArraySetجاوا ۾ استعمال بابت آهي. جيئن مون چيو، هو ننڍو ڀاءُ آهي CopyOnWriteArrayList. تنهن ڪري جيڪڏهن توهان انهن مان گهٽ ۾ گهٽ هڪ سمجهي، توهان ٻئي کي استعمال ڪري سگهو ٿا. فرق صرف اهو آهي ته هڪ آهي List''۽ ٻيو Setآهي''، تنهنڪري هي جاوا ۾ انهن ڊيٽا جي جوڙجڪ جي وچ ۾ سڀني فرقن کي ورثي ۾ داخل ڪري ٿو. مثال طور، Listعناصر جو حڪم اهم آهي ۽ شايد نقلن تي مشتمل هجي. جڏهن ته Setغير ترتيب ڏنل، اهو اجازت نه ڏيندو آهي شين جي نقل ڪرڻ جي. هميشه ياد رکو ته CopyOnWriteArraySetهي هڪ خاص Collectionطبقو آهي. اهو صرف استعمال ڪيو وڃي جڏهن حالتون سازگار آهن. ڪنهن ٻئي صورت ۾، توهان استعمال ڪري سگهو ٿا عام-مقصد لاڳو ڪرڻ. مثال طور HashSet، LinkedHashSetيا هم وقت سازي ڪليڪشن ڪلاس. اصل: مثال سان جاوا ۾ CopyOnWriteArraySet ڪيئن استعمال ڪجي
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION