Ի՞նչ եղանակներ կան Java-ում հավաքածուների վրա կրկնվելու համար։
sobes.tech AI
Պատասխան AI-ից
Java-յում գոյություն ունեն մի քանի եղանակներ հավաքածուների վրա օտարելու համար:
-
forցիկլը՝ օգտագործելով ինդեքս (օրինակArrayList,LinkedList՝ որոնք աջակցում են ինդեքսով մուտք գործելուն):
Հարմար է այն հավաքածուների համար, որտեղ ինդեքսով մուտքը արդյունավետ է:// ArrayList-ի օրինակ ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (int i = 0; i < list.size(); i++) { String element = list.get(i); System.out.println(element); } -
Ընդլայնված
forցիկլ (Enhanced for loop / for-each loop):
Ամենատարածված և հարմար միջոցը։ Հարմար է ցանկացածIterableինտերֆեյսը իրականացնող հավաքածուի համար:// ArrayList-ի օրինակ՝ for-each-ի օգտագործմամբ ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (String element : list) { System.out.println(element); } -
Iterator-ի օգտագործում:
Ավելի ճկուն միջոց, որը թույլ է տալիս հեռացնել տարրերը ժամանակի ընթացքում։ Հարմար է բոլոր հավաքածուների համար:// Iterator-ով օտարելու օրինակ ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); // Անվտանգ հեռացում // if (element.equals("B")) { // iterator.remove(); // } } -
ListIterator-ի օգտագործում (լիստերի համար):
Մասնագիտացված iterator, որը գործում էListինտերֆեյսը իրականացնող հավաքածուների համար։ Позволяет перемещаться как вперед, так и назад, а также добавлять и изменять элементы:// ListIterator-ով օտարելու օրինակ ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); ListIterator<String> listIterator = list.listIterator(); while (listIterator.hasNext()) { String element = listIterator.next(); System.out.println(element); } // հետադարձ օտարելու օրինակ while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (Java 8-ից սկսած):
Ֆունկցիոնալ մոտեցում՝ օգտագործելով lambda արտահայտություններ։ Позволяет выполнять операции над элементами коллекции (ֆիլտրում, փոխակերպում և այլն) դեկլարատիվ ոճով։ Օտարումը տեղի է ունենում "միջնորդ"-ի միջոցով՝ ներսում։// Streams API-ով օտարելու օրինակ ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream() .forEach(element -> System.out.println(element)); // Ֆիլտրում և փոխակերպում օրինակ // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Ընտրությունը կախված է կոնկրետ առաջադրանքից, հավաքածուի տեսակից և կատարողականի պահանջներից։ Ամենադյուրին տարբերակը՝ ընդլայնված for ցիկլը։ Եթե անհրաժեշտ է հեռացնել տարրեր՝ ժամանակի ընթացքում, օգտագործեք Iterator-ը։ Լիստերի համար, որտեղ անհրաժեշտ է երկու ուղղությամբ անցում, օգտագործեք ListIterator-ը։ Streams API-ն առաջարկում է հզոր հնարավորություններ տվյալների մշակման համար դեկլարատիվ ոճով։