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

મોટાભાગના ડેવલપર્સ ડિફોલ્ટ તરીકે ArrayList અથવા HashSet નો ઉપયોગ કરે છે. આ સરળ કાર્યો માટે કામ કરે છે. પરંતુ જ્યારે તમારે ઝડપ અથવા સ્કેલની જરૂર હોય ત્યારે તે નિષ્ફળ જાય છે.

મેં એકવાર સાદા ArrayList નો ઉપયોગ કરીને ગેમ લીડરબોર્ડ બનાવ્યું હતું. જ્યારે પણ સ્કોર બદલાતો ત્યારે હું તેને સોર્ટ કરતો હતો. તેના કારણે UI સતત ફ્રીઝ થઈ જતું હતું. હું ભાષાનો ઉપયોગ કરવાને બદલે તેની સામે લડી રહ્યો હતો.

ખોટા સાધનોનો ઉપયોગ કરવાનું બંધ કરો. ઝડપી અને સ્વચ્છ કોડ લખવા માટે આ ત્રણ વિશિષ્ટ collections નો ઉપયોગ કરો.

  1. Enum Constants માટે EnumSet

જો તમે enums માટે HashSet નો ઉપયોગ કરો છો, તો તમારે પરફોર્મન્સમાં નુકસાન વેઠવું પડશે. દરેક ઇન્સર્શન (insertion) enum ને એક ઓબ્જેક્ટમાં બોક્સ કરે છે. આનાથી બિનજરૂરી ઓવરહેડ વધે છે.

EnumSet બીટ વેક્ટર (bit vector) નો ઉપયોગ કરે છે. તે સિંગલ CPU ઇન્સ્ટ્રક્શનનો ઉપયોગ કરીને ચેક કરે છે.

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

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

  1. Range Queries માટે NavigableSet

રેન્જ શોધવા માટે સોર્ટેડ લિસ્ટમાં મેન્યુઅલી લૂપ ચલાવવું એ ધીમું છે અને ભૂલો થવાની શક્યતા રહે છે. ઘણીવાર તમને off-by-one બગ્સનો સામનો કરવો પડે છે.

NavigableSet તમારા ડેટાને આપમેળે સોર્ટેડ રાખે છે. તે subsets માટે O(log n) લુકઅપ્સ પ્રદાન કરે છે.

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) ધીમી પડી જાય છે. જો એક થ્રેડ લખતું હોય અને બીજું વાંચતું હોય, તો તે ConcurrentModificationException પણ પેદા કરે છે.

CopyOnWriteArrayList દરેક રાઈટ (write) પર એરેની નવી કોપી બનાવે છે. રીડર્સ એરેના સ્નેપશોટ (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.

હંમેશા એ જ બે કલેક્શનનો ઉપયોગ કરવાનું બંધ કરો. તમારા ડેટા પેટર્ન સાથે મેળ ખાતા સાધનની પસંદગી કરો.

સ્ત્રોત: https://dev.to/timevolt/the-java-collections-force-mastering-the-hidden-gems-like-a-jedi-4438