Java-da təkrarlayıcı


JavaBaxılıb 132

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Java-da Iterator, fərdi elementləri əldə etmək üçün bir kolleksiyada gezinmek üçün istifadə olunan bir interfeysdir. Kolleksiya bir ola bilər ArrayList, LinkedList, HashSetvə s. Java 1.2-də mövcud olan universal bir iteratordur. Java 1.2-dən əvvəl istifadə edirik Numaralandırma iterator kimi. Sayımın bir neçə məhdudiyyətinə görə Java İterator interface sonra ListIteratorSplitIterator.

Java təkrarlayıcıPin

 

Əvvəlcə, Enumeration haqqında anlayaq və sonra İteratorun niyə təqdim olunduğunu öyrənək.

Numaralandırma

Enumeration Java 1.0-dan bəri mövcud olan ilk iterator idi. Elementləri yalnız Vector, Hashtable, və s. Kimi Legacy kolleksiyalarından almaq üçün istifadə edə bilərik. Yalnız oxuma əməliyyatını dəstəkləyir və sadalamadan istifadə edərək yeniləmə və ya silmə əməliyyatını həyata keçirə bilmərik.

Siyahıya alma üsulları

Enumeration yalnız aşağıdakı 2 metodu dəstəkləyir:

ictimai boolean hasMoreElements () - Kolleksiyanın daha çox elementə sahib olub olmadığını yoxlayır

ictimai obyekt nextElement () - Kolleksiyadakı növbəti elementi qaytarır. Atır NoSuchElementException kolleksiyanın keçmək üçün heç bir elementi olmadıqda.

Nümunə

Aşağıda Vektor kolleksiyasından keçmək üçün sadalanmanın sadə bir nümunəsi verilmişdir. Biz istifadə edirik elements() Vektordakı bütün elementlərə giriş əldə etmək üsulu. Sonra kolleksiyanın daha çox elementə sahib olub olmadığını yoxlamaq üçün Enumeration obyektini istifadə edin hasMoreElements metod. Dəyərləri almaq üçün istifadə edin nextElement metodu.

import java.util.*;
 public class EnumerationDemo {
   public static void main(String[] args) {
     
     Vector vt = new Vector();
     vt.add("Dev");
     vt.add("Hari");
     vt.add("Rishi");
     
     Enumeration e = vt.elements();
     while(e.hasMoreElements())
       System.out.println(e.nextElement());
   }
 }
Dev
Hari
Rishi

Enumerations məhdudiyyətlərini aşmaq üçün İterator interfeys Java 1.2-dən etibarən mövcud idi.

Java-da təkrarlayıcı

Elementləri almaq və hər hansı birindən təkrarlamaq üçün Java iteratoru istifadə edə bilərik növləri Kolleksiya. Buna görə Universal iterator kimi adını aldı. Həm oxumaq həm də silmək əməliyyatlarını dəstəkləyir. Tək yönlüdür və keçidi yalnız irəli istiqamətdə dəstəkləyir. Texniki baxımdan təkrarlama, kolleksiyadakı hər bir element arasında gezinme deməkdir. Buna görə də adını bir İterator.

Java İterator metodları

Java iterator aşağıda müzakirə edildiyi kimi 4 dəstəkləmə metoduna malikdir:

Üsultəsvir
boolean hasNext ()Kolleksiyanın növbəti elementə sahib olub olmadığını yoxlayır. Kolleksiyada daha çox element varsa, doğru qayıdır
String next ();Növbəti elementi qaytarır. Heç bir element olmadığı təqdirdə NoSuchElementException atır
ləğv et ();Növbəti elementi silir. Next () metodu ilə zəng başına yalnız bir dəfə istifadə edilə bilər.
void forEachRemaining (İstehlakçı hərəkəti)Bütün elementlər işlənənə və ya əməliyyat istisna yaratana qədər hər bir element üçün göstərilən əməliyyatı yerinə yetirir

Iterator-un Java-da işləməsi

Aşağıda bir iteratorun işini göstərən addımlar verilmişdir.

  • Collection obyektindən istifadə edərək təkrarlayıcı metoduna daxil olun. Iterator<Type> iterator_variable = collectionObject.iterator(); burada Iterator interfeys, Type məlumat növüdür (String, Integer), iterator_variable dəyişən addır, collectionObject ArrayList, LinkedList kimi hər hansı bir kolleksiyanın obyektidir.
  • Çərçivəsində while loop, kolleksiyanın istifadə edərək növbəti elementə sahib olub olmadığını yoxlayırıq hasNext metod. Başlanğıcda, kursor əvvəlcə ilk elementdən əvvəlki vəziyyəti göstərəcəkdir.
  • Yuxarıdakı şərt doğrudursa, elementini istifadə edərək əldə edə bilərik next metod. Növbəti dəyəri gətirəcək və sonra kursor ilk elementə keçir.
  • Bu müddətə qədər davam edir hasNext metod yanlış bir dəyər qaytarır.

Java Iterator-da istisnalar

Aşağıda istisnalar Java iterator tərəfindən atıldı:

  • NoSuchElementException - istifadə edərək daxil olmaq üçün bir element olmadığı zaman bu istisnanı atır next metodu.
  • DəstəklənməyənOperationException - Təkrarlayıcı dəstəkləmədikdə remove üsul
  • QanunsuzStateException - Zəng etdiyimiz zaman remove çağırmadan əvvəl metod next metodu.
  • ParalelModifikasiyaİstisna - Təkrarlama zamanı kolleksiyaya yeni bir dəyər əlavə etdikdə.

Iterator istifadə məhdudiyyətləri

  • Yalnız irəli təkrarlamanı dəstəkləyir.
  • Yeniləmək və ya heç bir element əlavə etmək olmur.

Java iterator nümunəsi

Aşağıdakı nümunədə, ArrayList-dən keçmək üçün Java iteratordan istifadə edirik. Budur yaş ArrayList obyektidir.

import java.util.Iterator;
import java.util.ArrayList;

public class IteratorDemo {

  public static void main(String[] args) {
    ArrayList<Integer> age = new ArrayList<Integer>();
    age.add(10);
    age.add(20);
    age.add(30);
    age.add(40);
    age.add(50);
    
    Iterator<Integer> i = age.iterator();
    while(i.hasNext())
      System.out.print(i.next() + " ");

  }

}
10 20 30 40 50

Aşağıda, elementləri tərs qaydada göstərmək üçün LinkedList-də təkrarlayıcıdan istifadənin başqa bir nümunəsi verilmişdir. Bu metod descendingiterator yalnız LinkedList kolleksiyasında mövcuddur. İstifadə iterator üsulu onları faktiki qaydada çap edə bilərik.

import java.util.Iterator;
import java.util.LinkedList;

public class IteratorDemo {

  public static void main(String[] args) {
    LinkedList<String> values = new LinkedList<String>();
    values.add("Kavitha");
    values.add("Sunitha");
    values.add("Pavithra");
    values.add("Lalitha");

    Iterator<String> it = values.descendingIterator();
    System.out.println("Names: ");
    while(it.hasNext())
      System.out.print(it.next() + " ");

    Iterator<String> i = values.iterator();
    System.out.println("\nNames in actual order: ");
    while(i.hasNext())
      System.out.print(i.next() + " ");
  }

}
Names: 
Lalitha Pavithra Sunitha Kavitha 
Names in actual order: 
Kavitha Sunitha Pavithra Lalitha

Bu, bir Dəstdəki elementlərdən keçmək üçün bir iterator istifadə etmək üçün başqa bir nümunədir.

import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;

public class IteratorSetExample {

  public static void main(String[] args) {
    Set<String> setnames = new HashSet<String>();
    setnames.add("Roshan");
    setnames.add("Kiran");
    setnames.add("Tejas");
    setnames.add("Karthik");
    
    Iterator<String> iterator = setnames.iterator();
    while(iterator.hasNext())
      System.out.println(iterator.next());
  }

}
Roshan
Kiran
Tejas
Karthik

Aşağıda iteratoru istifadə edərək elementi silmək üçün bir nümunə var.

import java.util.*;

public class RemoveIterator {

  public static void main(String[] args) {
    ArrayList<Integer> num = new ArrayList<Integer>();
    for(int i=1;i<=5;i++)
      num.add(i);
    System.out.println("Original numbers:");
    System.out.println(num);
    
    Iterator<Integer> it = num.iterator();
    while(it.hasNext()) {
      int val = (Integer)it.next();
      if(val == 3)
        it.remove();
    }
    System.out.println();
    System.out.println("Numbers after removal:");
    System.out.println(num);	

  }

}
Original numbers:
[1, 2, 3, 4, 5]

Numbers after removal:
[1, 2, 4, 5]

Iterator istifadə edərək ConcurrentModificationException

İteratordan istifadə edərkən kolleksiyanın dəyərlərini əlavə etməyə və ya yeniləməyə çalışdığımızda ConcurrentModificationException atır. Aşağıda istisnanı göstərmək üçün bir nümunə var. Təkrarlama zamanı LinkedList kolleksiyasına yeni bir simli əlavə etməyə çalışdığımızda, istisna yaradır.

import java.util.Iterator;
import java.util.LinkedList;

public class IteratorExample {

  public static void main(String[] args) {
    LinkedList<String> values = new LinkedList<String>();
    values.add("Kavitha");
    values.add("Sunitha");
    values.add("Pavithra");
    values.add("Lalitha");
    
    Iterator<String> i = values.iterator();
    while(i.hasNext()) {
      values.add("Devika");
      System.out.print(i.next() + " ");
    }
      
  }

}
Exception in thread "main" java.util.ConcurrentModificationException
  at java.base/java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:970)
  at java.base/java.util.LinkedList$ListItr.next(LinkedList.java:892)
  at IteratorExample.main(IteratorExample.java:35)

Enumeration və Iterator arasındakı fərq

Numaralandırmaİterator
JDK 1.0-dan əldə etmək olarJDK 1.2-dan əldə etmək olar
Universal iterator deyilUniversal iteratordur
Yalnız Vector, hashtable kimi miras kolleksiyalarını təkrarlamaq üçün istifadə edilə bilərHər hansı bir Koleksiyonu təkrarlamaq üçün istifadə edilə bilər
Yalnız oxuma əməliyyatını dəstəkləyirHəm oxumaq, həm də silmək əməliyyatını dəstəkləyir
Uzun metod adları var
Məsələn: hasMoreElements ()
Qısa metod adları var
Məsələn: hasNext ()

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »
1