জাভাতে কোনও তালিকাতে পুনরাবৃত্তি করার উপায়


575

জাভা ভাষায় কিছুটা নতুন হওয়ার কারণে আমি নিজেকে সেই সমস্ত উপায়ের সাথে (বা কমপক্ষে অ-প্যাথলজিকাল বিষয়গুলি) সাথে পরিচিত করার চেষ্টা করছি যা কোনও তালিকার (বা সম্ভবত অন্যান্য সংগ্রহগুলি) এবং প্রতিটিটির সুবিধা বা অসুবিধাগুলির মাধ্যমে পুনরাবৃত্তি করতে পারে।

একটি List<E> listঅবজেক্ট দেওয়া , আমি সমস্ত উপাদান লুপ করার নিম্নলিখিত উপায়গুলি সম্পর্কে জানি:

লুপের জন্য বেসিক (অবশ্যই সমান / লুপগুলিও রয়েছে)whiledo while

// Not recommended (see below)!
for (int i = 0; i < list.size(); i++) {
    E element = list.get(i);
    // 1 - can call methods of element
    // 2 - can use 'i' to make index-based calls to methods of list

    // ...
}

দ্রষ্টব্য: @ মার্সিল্লান যেমন উল্লেখ করেছেন, এই ফর্মটি ওভারের জন্য পুনরাবৃত্তি করার জন্য একটি দুর্বল পছন্দ List, কারণ getপদ্ধতির আসল বাস্তবায়ন কোনও ব্যবহার করার সময় যেমন দক্ষ নাও হতে পারে Iterator। উদাহরণস্বরূপ, LinkedListবাস্তবায়নগুলি অবশ্যই i-th উপাদানটি পেতে i এর আগের সমস্ত উপাদানকে অতিক্রম করবে।

উপরের উদাহরণে Listভবিষ্যতের পুনরাবৃত্তিকে আরও দক্ষ করে তোলার জন্য "এর জায়গাটি সংরক্ষণ করুন" বাস্তবায়নের কোনও উপায় নেই । একটি জন্য ArrayListএটা সত্যিই ব্যাপার, কারণ জটিলতা / মূল্য না getধ্রুবক সময় (হে (1)) জন্য, অন্যদিকে একজন LinkedListএটা তালিকার আকার সমানুপাতিক (হে (ঢ))।

অন্তর্নির্মিত Collectionsবাস্তবায়নগুলির গণ্য জটিলতা সম্পর্কে আরও তথ্যের জন্য , এই প্রশ্নটি দেখুন

লুপের জন্য বর্ধিত ( এই প্রশ্নে সুন্দরভাবে ব্যাখ্যা করা হয়েছে )

for (E element : list) {
    // 1 - can call methods of element

    // ...
}

iterator

for (Iterator<E> iter = list.iterator(); iter.hasNext(); ) {
    E element = iter.next();
    // 1 - can call methods of element
    // 2 - can use iter.remove() to remove the current element from the list

    // ...
}

ListIterator

for (ListIterator<E> iter = list.listIterator(); iter.hasNext(); ) {
    E element = iter.next();
    // 1 - can call methods of element
    // 2 - can use iter.remove() to remove the current element from the list
    // 3 - can use iter.add(...) to insert a new element into the list
    //     between element and iter->next()
    // 4 - can use iter.set(...) to replace the current element

    // ...
}

কার্যকরী জাভা

list.stream().map(e -> e + 1); // Can apply a transformation function for e

Iterable.forEach , Stream.forEach , ...

(জাভা 8 এর স্ট্রিম এপিআইয়ের একটি মানচিত্রের পদ্ধতি (@ i_am_zero এর উত্তর দেখুন)))

জাভাতে 8 সংগ্রহের ক্লাসগুলি প্রয়োগ করে Iterable(উদাহরণস্বরূপ, সমস্ত Listগুলি) এখন একটি forEachপদ্ধতি রয়েছে, যা উপরে প্রদর্শিত লুপ স্টেটমেন্টের পরিবর্তে ব্যবহার করা যেতে পারে । (এখানে আরও একটি প্রশ্ন যা একটি ভাল তুলনা প্রদান করে))

Arrays.asList(1,2,3,4).forEach(System.out::println);
// 1 - can call methods of an element
// 2 - would need reference to containing object to remove an item
//     (TODO: someone please confirm / deny this)
// 3 - functionally separates iteration from the action
//     being performed with each item.

Arrays.asList(1,2,3,4).stream().forEach(System.out::println);
// Same capabilities as above plus potentially greater
// utilization of parallelism
// (caution: consequently, order of execution is not guaranteed,
// see [Stream.forEachOrdered][stream-foreach-ordered] for more
// information about this).

অন্য কোন উপায় আছে, যদি থাকে?

(বিটিডাব্লু, আমার আগ্রহটি পারফরম্যান্সকে অনুকূল করে তোলার আকাঙ্ক্ষায় একেবারেই কাটেনি ; আমি কেবল এটি জানতে চাই যে বিকাশকারী হিসাবে আমার কাছে কী ফর্মগুলি উপলভ্য।


1
এগুলি হ'ল অ-প্যাথলজিকালগুলি, যদিও আপনি সংগ্রহগুলি প্রক্রিয়া করার জন্য কয়েকটি কার্যকরী স্টাইলের লাইব্রেরিও ব্যবহার করতে পারেন।
ডেভ নিউটন

Listইন্টারফেস সম্পর্কে প্রশ্ন বিশেষভাবে হয়?
সোটিরিওস ডেলিমনলিস

@ সতিরিওসডেলিমনোলিস, সমস্ত উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য, হ্যাঁ এটি <কোড> তালিকা </ কোড> নির্দিষ্ট specific তাদের জানতে আগ্রহী।
আইএক্স 3

@ ডেভিনিউটন, ধারণার জন্য ধন্যবাদ। আমি এর আগে কিছু ব্যবহার করি নি। আমার সম্পাদিত প্রশ্নটি একবার দেখুন এবং আপনি কী বলতে চাইছেন তা যদি আমি বুঝতে পারি তবে আমাকে জানান let
আইএক্স 3

2
@sdasdadas, সম্পন্ন হয়েছে: stackoverflow.com/questions/18410035/...
iX3

উত্তর:


265

লুপিংয়ের তিনটি রূপ প্রায় অভিন্ন। বর্ধিত forলুপ:

for (E element : list) {
    . . .
}

জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন অনুসারে , aতিহ্যবাহী লুপের সাথে পুনরাবৃত্তির সুস্পষ্ট ব্যবহারের ক্ষেত্রে একই রকমfor । তৃতীয় ক্ষেত্রে, আপনি কেবলমাত্র বর্তমান উপাদানটি সরিয়ে তালিকার বিষয়বস্তুগুলি সংশোধন করতে পারেন এবং তারপরে, কেবলমাত্র যদি আপনি removeপুনরুক্তির পদ্ধতিতে এটি করেন it সূচক-ভিত্তিক পুনরাবৃত্তি সহ, আপনি যে কোনও উপায়ে তালিকাটি সংশোধন করতে পারেন। যাইহোক, বর্তমান সূচকের আগে উপস্থিত উপাদানগুলি যুক্ত করা বা অপসারণ করা আপনার লুপ এড়িয়ে যাওয়ার উপাদানগুলির মধ্যে থাকা বা একই উপাদানটিকে একাধিকবার প্রক্রিয়াজাতকরণের ঝুঁকিপূর্ণ; আপনি যখন এই জাতীয় পরিবর্তনগুলি করেন তখন আপনাকে লুপ সূচকটি সঠিকভাবে সামঞ্জস্য করতে হবে।

সব ক্ষেত্রেই elementহ'ল আসল তালিকার একটি উপাদান reference পুনরাবৃত্তি পদ্ধতির কোনওটিই তালিকার কোনও কিছুর অনুলিপি তৈরি করে না। অভ্যন্তরীণ অবস্থার পরিবর্তনগুলি elementসর্বদা তালিকার সাথে সম্পর্কিত উপাদানটির অভ্যন্তরীণ অবস্থাতে দেখা যাবে।

মূলত, তালিকার উপরে পুনরাবৃত্তি করার দুটি উপায় রয়েছে: একটি সূচক ব্যবহার করে বা একটি পুনরায় ব্যবহারকারীর মাধ্যমে। লুপের জন্য বর্ধিত হ'ল একটি পুনরুক্তিকারীকে স্পষ্টভাবে সংজ্ঞায়নের টেডিয়াম এড়ানোর জন্য জাভা 5 তে প্রবর্তিত একটি সিনট্যাক্টিক শর্টকাট। উভয় শৈলী জন্য, আপনি ব্যবহার করছেন মূলত তুচ্ছ বৈচিত্র সঙ্গে আসা পর্যন্ত করতে পারেন for, whileবা do whileব্লক, কিন্তু তারা একই জিনিস (অথবা, বরং দুটি জিনিস) এর সব ফোঁড়া নিচে।

সম্পাদনা: @ আইএক্স 3 যেমন একটি মন্তব্যে উল্লেখ করেছে, আপনি ListIteratorপুনরাবৃত্তি হওয়ায় তালিকার বর্তমান উপাদানটি সেট করতে আপনি একটি ব্যবহার করতে পারেন । লুপ ভেরিয়েবলটি আরম্ভ করার List#listIterator()পরিবর্তে আপনাকে ব্যবহার করতে হবে List#iterator()(যা স্পষ্টতই এর ListIteratorপরিবর্তে একটি হিসাবে ঘোষণা করতে হবে Iterator)।


ঠিক আছে, ধন্যবাদ, তবে যদি পুনরুক্তিকারীটি প্রকৃত উপাদানটির কোনও রেফারেন্স (কপি নয়) ফিরিয়ে দিচ্ছে তবে আমি কীভাবে তালিকার মান পরিবর্তন করতে এটি ব্যবহার করতে পারি? আমি নিতে যে যদি আমি ব্যবহার একটি e = iterator.next()তারপর করছেন e = somethingElseমাত্র পরিবর্তন কি বস্তু eথেকে বদলে উল্লেখ করা হয় প্রকৃত দোকান যেখান থেকে পরিবর্তন iterator.next()মান উদ্ধার করা হয়।
iX3

@ আইএক্স 3 - এটি সূচক ভিত্তিক পুনরাবৃত্তির ক্ষেত্রেও সত্য হবে; একটি নতুন অবজেক্ট বরাদ্দ করা eতালিকায় যা আছে তা পরিবর্তন করবে না; আপনাকে কল করার আছে list.set(index, thing)। আপনি পরিবর্তন করতে পারেন বিষয়বস্তু এর e(যেমন, e.setSomething(newValue)), কিন্তু পরিবর্তন কি উপাদান তালিকা সংরক্ষণ করা হয় হিসাবে আপনি এটা iterating হয়, আপনি একটি সূচক ভিত্তিক পুনরাবৃত্তির দিয়ে বিদ্ধ করা প্রয়োজন।
টেড হপ

এই ব্যাখ্যার জন্য আপনাকে ধন্যবাদ; আমি মনে করি আপনি এখন যা বলছেন তা আমি বুঝতে পেরেছি এবং সে অনুযায়ী আমার প্রশ্ন / মন্তব্যগুলি আপডেট করব। প্রতি-সেয়ে কোনও "অনুলিপি" নেই, তবে ভাষার নকশার বিষয়বস্তুগুলিতে পরিবর্তন আনার জন্য eআমাকে একটি eপদ্ধতির কল করতে হবে কারণ অ্যাসাইনমেন্টটি কেবলমাত্র পয়েন্টারটিকে পরিবর্তন করে (আমার সিফ ক্ষমা করে)।
আইএক্স 3

সুতরাং অপরিবর্তনীয় ধরণের তালিকার জন্য Integerএবং Stringসামগ্রীগুলি for-eachবা Iteratorপদ্ধতিগুলি ব্যবহার করে বিষয়বস্তু পরিবর্তন করা সম্ভব হবে না - তালিকার অবজেক্টগুলিকে উপাদানগুলিতে প্রতিস্থাপন করতে নিজেই হেরফের করতে হবে। এটা কি সঠিক?
আইএক্স 3

@ আইএক্স 3 - সঠিক। আপনি তৃতীয় ফর্ম (সুস্পষ্ট পুনরাবৃত্তকারী) দিয়ে উপাদানগুলি সরিয়ে ফেলতে পারেন, তবে আপনি কেবল সূচক ভিত্তিক পুনরাবৃত্তি ব্যবহার করলে তালিকার উপাদানগুলিতে উপাদান যুক্ত করতে বা প্রতিস্থাপন করতে পারেন।
টেড হপ

46

প্রশ্নের তালিকাভুক্ত প্রতিটি ধরণের উদাহরণ:

ListIterationExample.java

import java.util.*;

public class ListIterationExample {

     public static void main(String []args){
        List<Integer> numbers = new ArrayList<Integer>();

        // populates list with initial values
        for (Integer i : Arrays.asList(0,1,2,3,4,5,6,7))
            numbers.add(i);
        printList(numbers);         // 0,1,2,3,4,5,6,7

        // replaces each element with twice its value
        for (int index=0; index < numbers.size(); index++) {
            numbers.set(index, numbers.get(index)*2); 
        }
        printList(numbers);         // 0,2,4,6,8,10,12,14

        // does nothing because list is not being changed
        for (Integer number : numbers) {
            number++; // number = new Integer(number+1);
        }
        printList(numbers);         // 0,2,4,6,8,10,12,14  

        // same as above -- just different syntax
        for (Iterator<Integer> iter = numbers.iterator(); iter.hasNext(); ) {
            Integer number = iter.next();
            number++;
        }
        printList(numbers);         // 0,2,4,6,8,10,12,14

        // ListIterator<?> provides an "add" method to insert elements
        // between the current element and the cursor
        for (ListIterator<Integer> iter = numbers.listIterator(); iter.hasNext(); ) {
            Integer number = iter.next();
            iter.add(number+1);     // insert a number right before this
        }
        printList(numbers);         // 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

        // Iterator<?> provides a "remove" method to delete elements
        // between the current element and the cursor
        for (Iterator<Integer> iter = numbers.iterator(); iter.hasNext(); ) {
            Integer number = iter.next();
            if (number % 2 == 0)    // if number is even 
                iter.remove();      // remove it from the collection
        }
        printList(numbers);         // 1,3,5,7,9,11,13,15

        // ListIterator<?> provides a "set" method to replace elements
        for (ListIterator<Integer> iter = numbers.listIterator(); iter.hasNext(); ) {
            Integer number = iter.next();
            iter.set(number/2);     // divide each element by 2
        }
        printList(numbers);         // 0,1,2,3,4,5,6,7
     }

     public static void printList(List<Integer> numbers) {
        StringBuilder sb = new StringBuilder();
        for (Integer number : numbers) {
            sb.append(number);
            sb.append(",");
        }
        sb.deleteCharAt(sb.length()-1); // remove trailing comma
        System.out.println(sb.toString());
     }
}

23

আপনি তালিকার বাস্তবায়ন জানেন না বলে প্রাথমিক লুপটি সুপারিশ করা হয় না।

যদি এটি লিঙ্কডলিস্ট হয় তবে প্রতিটি কল করুন

list.get(i)

তালিকাটি পুনরাবৃত্তি হবে, ফলস্বরূপ N ^ 2 সময়ের জটিলতা।


1
সঠিক; এটি একটি ভাল পয়েন্ট, এবং আমি প্রশ্নের উদাহরণ আপডেট করব।
আইএক্স 3

এই পোস্ট অনুসারে, আপনার বক্তব্যটি সঠিক নয়: কোনটি আরও দক্ষ, প্রতিটি লুপের জন্য, বা একটি পুনরুক্তিকারী?
হিবিবেম

5
আমি সেই পোস্টে যা পড়ি তা হ'ল আমি যা বলেছিলাম ... আপনি কোন অংশটি ঠিক পড়ছেন?
amarseillan

20

একটি JDK8- শৈলী পুনরাবৃত্তি:

public class IterationDemo {

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3);
        list.stream().forEach(elem -> System.out.println("element " + elem));
    }
}

ধন্যবাদ, আমি শেষ পর্যন্ত জাভা 8 সমাধানগুলির সাথে তালিকার শীর্ষে তালিকাটি আপডেট করার ইচ্ছা করি।
আইএক্স 3

1
@ ইউজিন this২ এই পদ্ধতিটি কি আরও কার্যকর?
নাজার_আর

1
@ নাজার_আর্ট আপনি যদি খুব বড় সংগ্রহের মধ্যে প্যারালাল স্ট্রিম ব্যবহার না করেন তবে আপনি আর কোনও কিছুর চেয়ে বেশি উন্নতি দেখতে যাচ্ছেন না। এটি কেবলমাত্র ভার্বোসিটি নিরাময়ের অর্থেই আরও দক্ষ।
বিশৃঙ্খল

7

ইন জাভা 8 আমরা সংগ্রহ শ্রেণীর পুনরুক্তি উপর একাধিক উপায় আছে।

আইচারেবল ফর ইচ ব্যবহার করে

সংগ্রহগুলি কার্যকর করে Iterable(উদাহরণস্বরূপ সমস্ত তালিকা) এখন forEachপদ্ধতি রয়েছে। আমরা জাভা 8 -তে প্রবর্তিত পদ্ধতি-রেফারেন্স ব্যবহার করতে পারি ।

Arrays.asList(1,2,3,4).forEach(System.out::println);

স্ট্রিমস ফর ইচ এবং ফরএচআরআরড ব্যবহার করে

স্ট্রিম ব্যবহার করে আমরা একটি তালিকাতে পুনরাবৃত্তি করতে পারি :

Arrays.asList(1,2,3,4).stream().forEach(System.out::println);
Arrays.asList(1,2,3,4).stream().forEachOrdered(System.out::println);

আমাদের এটিকে পছন্দ forEachOrderedকরা উচিত forEachকারণ আচরণটি forEachসুস্পষ্টভাবে নিরপেক্ষবাদী যেখানে forEachOrderedস্ট্রিমটির প্রতিটি এনকুমেন্ট ক্রমে স্ট্রিমের এনকাউন্টার অর্ডারে এই স্ট্রিমের প্রতিটি উপাদানটির জন্য একটি ক্রিয়া সম্পাদন করে। সুতরাং forEach গ্যারান্টি দেয় না যে আদেশ রাখা হবে।

স্ট্রিমগুলির সুবিধাটি হ'ল আমরা যেখানে উপযুক্ত সেখানে সমান্তরাল স্ট্রিম ব্যবহার করতে পারি। যদি উদ্দেশ্যটি কেবল অর্ডার নির্বিশেষে আইটেমগুলি মুদ্রণ করা হয় তবে আমরা সমান্তরাল স্ট্রিম হিসাবে ব্যবহার করতে পারি:

Arrays.asList(1,2,3,4).parallelStream().forEach(System.out::println);

5

আপনি প্যাথলজিকালটি কী বিবেচনা করেন তা আমি জানি না তবে আমাকে এমন কিছু বিকল্প সরবরাহ করতে দিন যা আপনি আগে দেখেন নি:

List<E> sl= list ;
while( ! sl.empty() ) {
    E element= sl.get(0) ;
    .....
    sl= sl.subList(1,sl.size());
}

বা এর পুনরাবৃত্ত সংস্করণ:

void visit(List<E> list) {
    if( list.isEmpty() ) return;
    E element= list.get(0) ;
    ....
    visit(list.subList(1,list.size()));
}

এছাড়াও, ধ্রুপদী একটি পুনরাবৃত্তি সংস্করণ for(int i=0...:

void visit(List<E> list,int pos) {
    if( pos >= list.size() ) return;
    E element= list.get(pos) ;
    ....
    visit(list,pos+1);
}

আমি তাদের উল্লেখ করেছি কারণ আপনি "জাভাতে কিছুটা নতুন" এবং এটি আকর্ষণীয় হতে পারে।


1
এটি উল্লেখ করার জন্য ধন্যবাদ। আমি সাবলিস্ট পদ্ধতিটি কখনও দেখিনি। হ্যাঁ, আমি এটিকে রোগতাত্ত্বিক বলে বিবেচনা করব কারণ এমন কোনও পরিস্থিতিতে আমি জানি না যেখানে সম্ভবত এটি উদ্বিগ্ন প্রতিযোগিতা বাদ দিয়ে এটিকে ব্যবহার করা কখনই সুবিধাজনক হবে।
আইএক্স 3

3
ঠিক আছে. আমি "প্যাথলজিকাল" বলা পছন্দ করি না তাই এখানে একটি ব্যাখ্যা দেওয়া আছে: আমি গাছগুলিতে ট্র্যাকগুলি অনুসরণ করার বা অনুসরণ করার সময় সেগুলি ব্যবহার করেছি। আরো একটা? জাভাতে কিছু লিস্প প্রোগ্রাম অনুবাদ করার সময় আমি চাইনি যে সেগুলি তাদের লিস্প স্পিরিটি হারাতে পারে এবং একই কাজ করেছিল। আপনি যদি মনে করেন এগুলি বৈধ, অ প্যাথলজিকাল ব্যবহার নয় comment আমার একটা গ্রুপ আলিঙ্গন দরকার !!! :-)
মারিও রসি

গাছের রাস্তাগুলি কি তালিকার চেয়ে আলাদা নয়? বিটিডাব্লু, আমি আপনাকে বা কোনও ব্যক্তিকে "প্যাথলজিকাল" বলা বলতে চাইছিলাম না আমি কেবল বলতে চাইছিলাম যে আমার প্রশ্নের কিছু উত্তর বোধগম্যভাবে অযৌক্তিক হবে বা ভাল সফ্টওয়্যার ইঞ্জিনিয়ারিং অনুশীলনের মূল্যমানের সম্ভাবনা খুব কম।
আইএক্স 3

@ আইএক্স 3 চিন্তা করবেন না; আমি শুধু মজা করছিলাম. পাথগুলি তালিকাগুলি: "মূল থেকে শুরু করুন" (স্পষ্টত), "দ্বিতীয় সন্তানের দিকে যান", "প্রথম সন্তানের দিকে যান", "চতুর্থ সন্তানের দিকে যান"। "স্টপ"। বা [2,1,4] সংক্ষেপে। এটি একটি তালিকা।
মারিও রসি

আমি তালিকার একটি অনুলিপি তৈরি করতে এবং ব্যবহার করতে পছন্দ করব while(!copyList.isEmpty()){ E e = copyList.remove(0); ... }। এটি প্রথম সংস্করণের চেয়ে কার্যকর;)।
এক্সেলএইচ


0

পশ্চাদপদ অনুসন্ধানের জন্য আপনার নিম্নলিখিতটি ব্যবহার করা উচিত:

for (ListIterator<SomeClass> iterator = list.listIterator(list.size()); iterator.hasPrevious();) {
    SomeClass item = iterator.previous();
    ...
    item.remove(); // For instance.
}

আপনি যদি কোনও অবস্থান জানতে চান তবে পুনরাবৃত্তকারী ব্যবহার করুন pre এটি তালিকার দুটি অবস্থানের তুলনা করে এমন একটি অভ্যন্তরীণ লুপ লিখতে সহায়তা করে (পুনরাবৃত্তকারী সমান নয়)।


0

ঠিক আছে, অনেক বিকল্প তালিকাভুক্ত করা হয়। সবচেয়ে সহজ এবং পরিষ্কারতম forনীচের হিসাবে বর্ধিত বিবৃতি ব্যবহার করা হবে । Expressionকিছু টাইপ iterable যে হয়।

for ( FormalParameter : Expression ) Statement

উদাহরণস্বরূপ, তালিকা <স্ট্রিং> আইডিগুলির মাধ্যমে পুনরাবৃত্তি করতে, আমরা কেবল তাই করতে পারি,

for (String str : ids) {
    // Do something
}

3
তিনি জিজ্ঞাসা করছেন যে প্রশ্নটিতে বর্ণিত বিষয়গুলি ছাড়াও অন্য কোনও উপায় রয়েছে (যার মধ্যে আপনি উল্লেখ করেছেন এটি অন্তর্ভুক্ত)!
এরিকন

0

ইন java 8আপনি ব্যবহার করতে পারেন List.forEach()সঙ্গে পদ্ধতি lambda expressionএকটি তালিকা পুনরুক্তি করতে।

import java.util.ArrayList;
import java.util.List;

public class TestA {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Apple");
        list.add("Orange");
        list.add("Banana");
        list.forEach(
                (name) -> {
                    System.out.println(name);
                }
        );
    }
}

কুল। ব্যাখ্যা গেল কিভাবে এই থেকে ভিন্ন eugene82এর উত্তর এবং i_am_zeroএর উত্তর ?
আইএক্স 3

@ আইএক্স 3 আহ। পুরো উত্তর তালিকাটি পড়েনি। সহায়ক হওয়ার চেষ্টা করছিল .. আপনি কি উত্তরটি সরাতে চান?
অনুসন্ধান ফলাফল ওয়েব ফলাফল পাই

আমার কাছে কিছু আসে যায় না, যদিও আপনি এটি অন্য কৌশলগুলির সাথে তুলনা করে এবং তার বিপরীতে বিস্তৃত করে উন্নত করতে পারেন। অথবা যদি আপনি ভাবেন যে এটি কোনও নতুন কৌশল প্রদর্শন করে না তবে এটি অন্যদের জন্য একটি রেফারেন্স হিসাবে কার্যকর হতে পারে তবে সম্ভবত আপনি এটির একটি বিবরণ যুক্ত করতে পারেন।
আইএক্স

-2

আপনি সর্বদা প্রথম এবং তৃতীয় উদাহরণগুলি কিছুক্ষণ লুপ এবং আরও কিছু কোড সহ স্যুইচ আউট করতে পারেন। এটি আপনাকে করণীয়-সময় ব্যবহার করতে সক্ষম হওয়ার সুবিধা দেয়:

int i = 0;
do{
 E element = list.get(i);
 i++;
}
while (i < list.size());

অবশ্যই, তালিকা.সাইজ () 0 প্রদান করে যদি এই ধরণের জিনিসটি নলপয়েন্টারএক্সসেপশন ঘটাতে পারে তবে এটি সর্বদা কমপক্ষে একবার কার্যকর হয়ে যায়। উপাদানটির বৈশিষ্ট্য / পদ্ধতিগুলি ব্যবহার করার আগে যদি উপাদানটি শূন্য থাকে তবে এটি পরীক্ষা করে ঠিক করা যায়। তবুও, লুপটির জন্য এটি ব্যবহার করা অনেক সহজ এবং সহজ


সত্য ... আমি অনুমান করি যে প্রযুক্তিগতভাবে পৃথক, তবে তালিকাটি খালি থাকলে, আচরণগুলি কেবল আলাদা?
আইএক্স 3

@ ix3 হ্যাঁ, এবং সেই ক্ষেত্রে, আচরণটি আরও খারাপ। আমি এটিকে একটি ভাল বিকল্প বলব না।
সিপারকিনস

অবশ্যই, তবে ন্যায্যতার সাথে, এই প্রশ্নটি "ভাল" কী এবং "সম্ভাব্য" কী তা সম্পর্কে আরও কম, তাই আমি এখনও এই উত্তরটির প্রশংসা করি।
আইএক্স 3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.