JavaRush /Блоги Java /Random-TG /Чӣ тавр истифода бурдани CopyOnWriteArraySet дар Java бо ...
Lam-lam
Сатҳи

Чӣ тавр истифода бурдани CopyOnWriteArraySet дар Java бо мисол (тарҷума)

Дар гурӯҳ нашр шудааст
CopyOnWriteArraySetИн бародари хурдии синф аст CopyOnWriteArrayList. Инҳо маҷмӯи махсуси синфҳо мебошанд, ки дар JDK 1.5 ҳамроҳ бо ҷияни маъмултарини онҳо илова карда шудаанд ConcurrentHashMap. Онҳо як қисми баста concurrent collection frameworkва дар баста ҷойгиранд java.util.concurrent. Чӣ тавр истифода бурдани CopyOnWriteArraySet дар Java бо мисол (тарҷума) - 1CopyOnWriteArraySetБеҳтарин барои маҷмӯаҳои танҳо барои хондан мувофиқ аст, ки ҳаҷмаш ба қадри кофӣ хурд аст, ки дар сурати ба амал омадани баъзе амалиёти тағирдиҳӣ нусхабардорӣ карда шаванд. Масалан, шумо метавонед CopyOnWriteArraySetбарои нигоҳ доштани an object ҳангоми оғози барнома истифода баред ва якчанд риштаҳои дигар ба он an object дар давоми давраи ҳаёти барнома дастрасӣ пайдо кунед. Агар дар давоми ин вақт ҳолати нав ё an objectи нав ворид шавад, он метавонад ба ин ҳолат низ илова карда шавад Set, бо нархи сохтани массиви нав. Яке аз муҳимтарин чизҳои донистани он CopyOnWriteArraySetаст, ки он бо истифода аз CopyOnWriteArrayList. Ин маънои онро дорад, ки он CopyOnWriteArraySetинчунин тамоми хосиятҳои асосии CopyOnWriteArrayList. Чизи муҳими дигаре, ки бояд дар хотир дошт, ин аст, ки итераторҳои ин синфи коллексия remove(). Кӯшиши аз байн бурдани элемент ҳангоми ҳамгироӣ боиси аз ҳад зиёд мешавад UnsupportedOperationException. Ин барои таъмини суръат дар вақти хазандагон анҷом дода мешавад. Гузаронидани ин татбиқ Setбо истифода аз итератор хеле зуд аст ва аз дахолати риштаҳои дигар пешгирӣ мекунад. Барои кор кардан, итераторҳо ба акси массив, ки ҳангоми сохтани итератор гирифта шудааст, такя мекунанд. Хулоса, ҳангоми илова кардан, насб кардан ё нест кардани an objectҳо 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 дар Java

Дар ин ҷо як барномаи тайёри Java аст, ки чӣ тавр истифода бурдани CopyOnWriteArraySet. Дар мисоли мо, мо намунаи publisher -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дохorро истифода мебарад . CopyOnWriteArrayListҲамин тариқ, он дорои ҳамон хосиятҳои асосии ин синф мебошад. Азбаски он нест SortedSet, тартиби элементҳо ҳангоми такрор кафолат дода намешавад. Чӣ тавр истифода бурдани CopyOnWriteArraySet дар Java бо мисол (тарҷума) - 2
  1. CopyOnWriteArraySetБеҳтарин барои барномаҳое мувофиқ аст, ки дар он ҷо:

    • Андозаи Set''ҳо одатан хурд боқӣ мемонанд.
    • Амалиётҳо read-onlyнисбат ба амалиётҳое, ки an objectҳоро тағир медиҳанд, хеле бартарӣ доранд.
    • Ҳангоми гузариш шумо бояд дахолати байни риштаҳоро пешгирӣ кунед Set.
  2. Афзалияти дигар CopyOnWriteArraySetбехатарии ришта мебошад. Ин маҷмӯа ҳамоҳангиро дастгирӣ мекунад.
  3. Амалиётҳои мутативӣ (илова кардан, тағир додан, нест кардан ва ғ.) гарон мебошанд, зеро онҳо маъмулан нусхабардории тамоми массиви асосиро талаб мекунанд.
  4. Итераторҳо амалиёти тозакунии мутативро дастгирӣ намекунанд.
  5. Гузариш бо истифода аз итератор хеле зуд аст ва ҳангоми он дахолати риштаҳои дигар истисно карда мешавад. Барои кор кардан, итераторҳо ба акси массив, ки ҳангоми сохтани итератор гирифта шудааст, такя мекунанд.
Ин ҳама дар бораи истифода CopyOnWriteArraySetдар Java аст. Тавре гуфтам, ӯ бародари хурдӣ аст CopyOnWriteArrayList. Пас, агар шумо ақаллан яке аз онҳоро фаҳмед, шумо метавонед дигарашро истифода баред. Ягона тафовут дар он аст, ки яке List'' ва дигаре Set'' аст, бинобар ин, ин мерос гирифтани тамоми фарқиятҳои байни ин сохторҳои додаҳо дар Java мебошад. Масалан, Listтартиби элементҳо муҳим аст ва метавонад такрорҳоро дар бар гирад. Дар ҳоле ки Setбетартиб, он такрори an objectҳоро иҷозат намедиҳад. Ҳамеша дар хотир доред, ки CopyOnWriteArraySetин як синфи махсус аст Collection. Он бояд танҳо дар ҳолати мусоид истифода шавад. Дар ҳама ҳолатҳои дигар, шумо метавонед татбиқи таъиноти умумиро истифода баред. Масалан, HashSet, LinkedHashSetё синфҳои коллексияи ҳамоҳангшуда. Асл: Чӣ тавр истифода бурдани CopyOnWriteArraySet дар Java бо мисол
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION