Bu gün Iterator-yň Java-daky nämedigini we näme üçin zerurdygyny gürleşeris .
Mälim bolşy ýaly, Java-da Iterator interfeýsini ýerine ýetirýän ajaýyp Kolleksiýa interfeýsi bar. Derrew öňünden bellik goýaýyn: iterator interfeýsini Java-da iterator nagşy bilen garyşdyrmaly däl! Düşündirmek üçin ilki interfeýsine seredeliň.
Java-da iteratoryň ýokdugyny bir sekunt göz öňüne getireliň. Bu ýagdaýda, her kim kolleksiýalaryň çuňlugyna çümmeli we nämäniň we nämäniň tapawudyna
Göçme manyda “Iterator” “zalym güýç ” hökmünde terjime edilip bilner . .Agny, ýygyndydaky ähli elementleriň üsti bilen gaýtalap bilýän belli bir guramadyr. Mundan başga-da, kolleksiýalaryň içerki gurluşyna we tertibine göz aýlamazdan muny etmäge mümkinçilik berýär. |
ArrayList
hakykatdanam LinkedList
düşünmeli HashSet
bolar TreeSet
.
Iteratoryň durmuşa geçirmeli usullary
boolean hasNext()
- gaýtalanyp boljak obýektde (häzirki ýygyndy) henizem bahalar galan bolsa, true
başga gymmatlyklar ýok bolsa, usul gaýdyp geler false
. E next()
- ýygyndy (obýekt) indiki elementini gaýtaryp berýär. Başga elementler ýok bolsa (barlag ýokdy we kolleksiýanyň soňuna ýetenimizde hasNext()
jaň etdik ), usul atar . - iň soňky alan elementini aýyrar . Usul zyňyp biler: next()
NoSuchElementException
void remove()
next()
UnsupportedOperationException
, bu iterator usuly goldamaýan bolsaremove()
(mysal üçin diňe okalýan ýygyndylarda)IllegalStateException
, usulnext()
entek çagyrylmadyk bolsa ýa-daremove()
soňky jaňdan bäri eýýäm çagyrylan bolsanext()
.
for-each
. Giňeldilmegi “ListIterator”. Geliň, java sanawynyň iterator usullaryna seredeliň. Olary bilýän bolsaňyz gerek:
void add(E e)
- bir elementE
salýar ;List
boolean hasPrevious()
- ters gözleg wagtynda elementler bartrue
bolsa gaýdyp geler ;List
int nextIndex()
- indiki elementiň indeksini yzyna getirer;E previous()
- öňki sahypanyň elementini yzyna berer;int previousIndex()
- öňki elementiň indeksini yzyna getirer;void set(E e)
next()
- soňky jaň bilen yzyna gaýtarylan elementi ýa-previous()
da elementi çalşare
.
List
okuwçylara salam setirlerini öz içine alýan:
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Обучающимся");
list.add("На");
list.add("JavaRush");
Indi munuň üçin iterator alarys we ähli setirleri konsola çap ederis:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
Indi “päsgelçilik” bolar: Java kolleksiýalary, bilşiňiz ýaly (we bilmeseňiz, anyklaň) interfeýsi giňeldiň , Iterable
ýöne bu diňe many aňlatmaýar we iteratory goldaýar. Sebäbi hem goldanýar, ýöne çagyrylmaly : List
Set
Queue
java Map iterator
Map.entrySet()
Map<String, Integer> map = new HashMap<>();
Iterator mapIterator = map.entrySet().iterator();
Soňra usul “açar” - “baha” jübütini öz içine alýan next()
obýekti yzyna getirer . Entry
Soňra hemme zat birmeňzeş List
:
while (mapIterator.hasNext()) {
Map.Entry<String, Integer> entry = mapIterator.next();
System.out.println("Key: " + entry.getKey());
System.out.println("Value: " + entry.getValue());
}
Siz: “Dur. Interfeýs hakda aýdýarys, makalanyň ady “Nusga” diýilýär. ? Agny, iterator nagşy Iterator interfeýsi? Ora-da interfeýs nagyşmy? Bu söz ilkinji gezek peýda bolsa, size salgylanma berýärin: nagyş dizaýn nagşy, bir synpyň ýa-da köp baglanyşykly synplaryň berjaý etmeli belli bir häsiýetidir. Java-da iterator, içerki gurluşy gaýtalanmagy öz içine alýan islendik obýekt üçin amala aşyrylyp bilner we ara alnyp maslahatlaşylan usullaryň goly üýtgedilip bilner. Bir nagyş durmuşa geçirilende esasy zat, synpyň berjaý etmeli logikasydyr. Iterator interfeýsi,List, Set, Queue, Map
programmistiň islegine görä , taýýar gurluşlara () we beýlekilere ulanylýan, şol bir atyň nagşynyň şahsy durmuşa geçirilmegi . Iterator interfeýsini giňeltmek bilen, bir nagşy durmuşa geçirýärsiňiz, ýöne nagşy durmuşa geçirmek üçin interfeýsi giňeltmegiň zerurlygy ýok. Simpleönekeý meňzeşlik: balyklaryň hemmesi ýüzýär, ýöne ýüzýänleriň hemmesi balyk däl. Mysal hökmünde, söz almagy makul bildim. Has takygy, at. Böleklerden durýar: prefiks, kök, goşulma we gutarmak. WordPart
Sözüň bölekleri üçin interfeýs we ony uzaldýan synplar dörederis Prefix, Root, Suffix и Ending
:
interface WordPart {
String getWordPart();
}
static class Root implements WordPart {
private String part;
public Root(String part) {
this.part = part;
}
@Override
public String getWordPart() {
return part;
}
}
static class Prefix implements WordPart {
private String part;
public Prefix(String part) {
this.part = part;
}
@Override
public String getWordPart() {
return part;
}
}
static class Suffix implements WordPart {
private String part;
public Suffix(String part) {
this.part = part;
}
@Override
public String getWordPart() {
return part;
}
}
static class Ending implements WordPart {
private String part;
public Ending(String part) {
this.part = part;
}
@Override
public String getWordPart() {
return part;
}
}
Soňra synpda Word
(söz) bölekler bolar we olara goşmaça sözdäki bölekleriň sanyny görkezýän bitewi san goşarys:
public class Word {
private Root root;
private Prefix prefix;
private Suffix suffix;
private Ending ending;
private int partCount;
public Word(Root root, Prefix prefix, Suffix suffix, Ending ending) {
this.root = root;
this.prefix = prefix;
this.suffix = suffix;
this.ending = ending;
this.partCount = 4;
}
public Word(Root root, Prefix prefix, Suffix suffix) {
this.root = root;
this.prefix = prefix;
this.suffix = suffix;
this.partCount = 3;
}
public Word(Root root, Prefix prefix) {
this.root = root;
this.prefix = prefix;
this.partCount = 2;
}
public Word(Root root) {
this.root = root;
this.partCount = 1;
}
public Root getRoot() {
return root;
}
public Prefix getPrefix() {
return prefix;
}
public Suffix getSuffix() {
return suffix;
}
public Ending getEnding() {
return ending;
}
public int getPartCount() {
return partCount;
}
public boolean hasRoot() {
return this.root != null;
}
public boolean hasPrefix() {
return this.prefix != null;
}
public boolean hasSuffix() {
return this.suffix != null;
}
public boolean hasEnding() {
return this.ending != null;
}
Bolýar, bizde dört sany artykmaç konstruktor bar (ýönekeýlik üçin, diňe bir goşulma bolup bileris öýdýän). Isim bir prefiksden ybarat bolup bilmez, şonuň üçin bir parametrli konstruktor üçin kök gurarys. Indi iterator nagşynyň ýerine ýetirilişini ýazalyň: WordIterator, 2 usuly ýok edip: hasNext()
we next()
:
public class WordIterator implements Iterator<Word.WordPart> {
private Word word;
private int wordPartsCount;
public WordIterator(Word word) {
this.word = word;
this.wordPartsCount = word.getPartCount();
}
@Override
public boolean hasNext() {
if (wordPartsCount == 4) {
return word.hasPrefix() || word.hasRoot() || word.hasSuffix() || word.hasEnding();
} else if (wordPartsCount == 3) {
return word.hasPrefix() || word.hasRoot() || word.hasSuffix();
} else if (wordPartsCount == 2) {
return word.hasPrefix() || word.hasRoot();
} else if (wordPartsCount == 1) {
return word.hasRoot();
}
return false;
}
@Override
public Word.WordPart next() throws NoSuchElementException {
if (wordPartsCount <= 0) {
throw new NoSuchElementException("No more elements in this word!");
}
try {
if (wordPartsCount == 4) {
return word.getEnding();
}
if (wordPartsCount == 3) {
return word.getSuffix();
}
if (wordPartsCount == 2) {
return word.getPrefix();
}
return word.getRoot();
} finally {
wordPartsCount--;
}
}
}
Galan zat, iteratory synpa bellemek Word
:
public class Word implements Iterable<Word.WordPart> {
…
@Override
public Iterator<WordPart>iterator() {
return new WordIterator(this);
}
…
}
Indi “howlukma” sözüniň morfemiki derňewini geçireliň:
public class Main {
public static void main(String[] args) {
Word.Root root = new Word.Root("беж");
Word.Prefix prefix = new Word.Prefix("пере");
Word.Suffix suffix = new Word.Suffix("к");
Word.Ending ending = new Word.Ending("a");
Word word = new Word(root, prefix, suffix, ending);
Iterator wordIterator = word.iterator();
while (wordIterator.hasNext()) {
Word.WordPart part = (Word.WordPart) wordIterator.next();
System.out.println(part.getClass() + ": " + part.getWordPart());
}
}
}
Iterator nagşyny ýerine ýetirenimde, aşakdaky çykyş tertibini saýlandygymy ýadyňyzdan çykarmaň:
- gutarýar
- goşulmasy
- konsol
- kök
GO TO FULL VERSION