java-development-for-beginners-learnit / 19 - Java Collections Framework /010 Iterable, Iterator & ListIterator_en.srt
Tan115's picture
Add files using upload-large-folder tool
2e5dac7 verified
Raw
History Blame Contribute Delete
27.1 kB
1
00:00:06,000 --> 00:00:06,000
Hello, Jim.
2
00:00:06,000 --> 00:00:11,000
In this lesson, we are going to talk about what iterable and iterator interfaces are.
3
00:00:11,000 --> 00:00:17,000
We would investigate source code of these two interfaces and also will answer what is the role of these
4
00:00:17,000 --> 00:00:19,000
two interfaces in Java collections framework.
5
00:00:20,000 --> 00:00:23,000
After this lesson, you will never confuse these two interfaces.
6
00:00:23,000 --> 00:00:26,000
We are going to learn three types of iterator.
7
00:00:26,000 --> 00:00:32,000
And at the end of the lesson, I also want to demo what least Iterator is and how it is different from
8
00:00:32,000 --> 00:00:33,000
Iterator.
9
00:00:33,000 --> 00:00:34,000
Let's start.
10
00:00:34,000 --> 00:00:40,000
I believe you remember that first time when we looked at collection interface, we found that collection
11
00:00:40,000 --> 00:00:43,000
interface is extended from iterable interface.
12
00:00:43,000 --> 00:00:50,000
You remember that as you can see on this class diagram, iterable interface has only one method iterator.
13
00:00:51,000 --> 00:00:53,000
This method should return object of iterate type.
14
00:00:54,000 --> 00:00:59,000
That means that each implementation of collection interfacing Java should have iterator.
15
00:00:59,000 --> 00:01:03,000
I believe that is all what we can say about iterable interface.
16
00:01:03,000 --> 00:01:10,000
This interface is to tell that I'm the type that has iterator more interesting to talk about what an
17
00:01:10,000 --> 00:01:17,000
iterator is and to answer this question, I suggest reviewing source code of iterator type in eclipse
18
00:01:17,000 --> 00:01:18,000
in few words.
19
00:01:18,000 --> 00:01:22,000
Iterator is a type that can go over each element in a container.
20
00:01:22,000 --> 00:01:23,000
That's it.
21
00:01:23,000 --> 00:01:27,000
You might be wondering, is it really so hard and separate type is needed?
22
00:01:28,000 --> 00:01:31,000
It is not so hard, but imagine two simple cases.
23
00:01:31,000 --> 00:01:34,000
You have array lists and linked list.
24
00:01:34,000 --> 00:01:39,000
In our list we are together elements from the array by the indexes in the linked list.
25
00:01:39,000 --> 00:01:44,000
We have to get the reference to the next node from each node to iterate over elements.
26
00:01:44,000 --> 00:01:50,000
Can you see that the way how to iterate over each element, even in these two collections, is completely
27
00:01:50,000 --> 00:01:51,000
different?
28
00:01:52,000 --> 00:01:58,000
That's exactly the reason why we need to come up with some abstract type like Iterator to set the interface
29
00:01:58,000 --> 00:02:02,000
that should be implemented by specific implementations of collection interface.
30
00:02:02,000 --> 00:02:05,000
So let's sum up what Iterator is.
31
00:02:06,000 --> 00:02:12,000
Iterator is an interface that allows access to the elements in container and navigation in collection,
32
00:02:12,000 --> 00:02:19,000
including iteration or in other words, looping over each element in any collection without knowing
33
00:02:19,000 --> 00:02:22,000
the details of implementation of specific collection.
34
00:02:23,000 --> 00:02:30,000
Now we are going to run the interface of iterate the type it has to abstract and two default methods.
35
00:02:31,000 --> 00:02:33,000
Let me explain what each of these methods is about.
36
00:02:34,000 --> 00:02:37,000
Has an X method returns true or false?
37
00:02:37,000 --> 00:02:43,000
It tells us whether the next element is present will use this method in loops to check if it was to
38
00:02:43,000 --> 00:02:49,000
go on with our loop or we reached the end of the collection and we have to break the loop.
39
00:02:50,000 --> 00:02:53,000
Next method returns the next element in connection.
40
00:02:53,000 --> 00:02:54,000
Be careful.
41
00:02:54,000 --> 00:03:01,000
This method may throw no such element exception and interrupt your program execution in case you called
42
00:03:01,000 --> 00:03:02,000
next method.
43
00:03:02,000 --> 00:03:04,000
But there are no any elements there.
44
00:03:04,000 --> 00:03:07,000
That is a contract of the Iterator interface.
45
00:03:07,000 --> 00:03:09,000
We can do nothing about that.
46
00:03:09,000 --> 00:03:16,000
That's why before calling next method, we have to always call has next method remove method supposed
47
00:03:16,000 --> 00:03:21,000
to remove the last element returned by next method and now attention.
48
00:03:21,000 --> 00:03:25,000
This method can be called only once after each next method call.
49
00:03:25,000 --> 00:03:31,000
We can't call two times next method and after that call two times remove method.
50
00:03:31,000 --> 00:03:37,000
That is the way how Iterator should work in case you would call remove method without calling next method
51
00:03:37,000 --> 00:03:42,000
or we'll call remove two times in a row in your program, your program will be stopped with illegal
52
00:03:42,000 --> 00:03:43,000
state exception.
53
00:03:44,000 --> 00:03:46,000
But there is more interesting thing here.
54
00:03:46,000 --> 00:03:50,000
By default, remove method throws and support the separation exception.
55
00:03:50,000 --> 00:03:56,000
That means that in case we would call this method, our program will be stopped with the exceptional
56
00:03:56,000 --> 00:03:56,000
situation.
57
00:03:57,000 --> 00:04:01,000
Now I'm going to say not only my opinion, but opinion of different engineers too.
58
00:04:02,000 --> 00:04:06,000
It is senseless to declare method in the interface that is not needed.
59
00:04:06,000 --> 00:04:07,000
Yes, exactly.
60
00:04:08,000 --> 00:04:14,000
This exception here and support the separation exception tells us that by default this method is not
61
00:04:14,000 --> 00:04:15,000
supported.
62
00:04:15,000 --> 00:04:18,000
Don't do that during the implementation of your interfaces.
63
00:04:19,000 --> 00:04:19,000
Why?
64
00:04:20,000 --> 00:04:21,000
Let me explain here.
65
00:04:21,000 --> 00:04:24,000
We can see a violation of one of the solid principles.
66
00:04:25,000 --> 00:04:29,000
Can you guess what solid principle is violated in the Iterator interface?
67
00:04:30,000 --> 00:04:31,000
Exactly.
68
00:04:31,000 --> 00:04:34,000
High principle interface aggregation principle.
69
00:04:34,000 --> 00:04:39,000
According to this principle, no client should be forced to depend on methods it doesn't use.
70
00:04:40,000 --> 00:04:46,000
Originally, according to the documentation, Iterator type was created to iterate over elements, but
71
00:04:46,000 --> 00:04:47,000
not to remove them.
72
00:04:47,000 --> 00:04:50,000
How would I recommend implementing this?
73
00:04:50,000 --> 00:04:56,000
I would create something like removable iterator that extends iterate type and would let client of my
74
00:04:56,000 --> 00:05:03,000
code to decide whether they need to remove method or no, because right now each implementation of Iterator.
75
00:05:03,000 --> 00:05:10,000
Interface has removed MassArt, even if it is not a that this is default MassArt and there is no need
76
00:05:10,000 --> 00:05:10,000
to override it.
77
00:05:11,000 --> 00:05:18,000
But this does not make life of engineers easier because we still can call, remove by mistake and rely
78
00:05:18,000 --> 00:05:21,000
on the fact that this behavior should be supported in iterator.
79
00:05:22,000 --> 00:05:24,000
Now, you know that there is an exception here.
80
00:05:25,000 --> 00:05:30,000
The other side of this violation is that in the case in Java collections framework, engineers would
81
00:05:30,000 --> 00:05:35,000
follow all or P principles, including interface aggregation principle.
82
00:05:35,000 --> 00:05:42,000
There would be big bank of interfaces that is hard to learn and hard to remember and even harder to
83
00:05:42,000 --> 00:05:42,000
maintain.
84
00:05:43,000 --> 00:05:49,000
So as you can see, programming like everything else in our lives is all about tradeoffs and compromises.
85
00:05:50,000 --> 00:05:56,000
The last but not the least massaged here in Interactor interface is for each remaining, this matter
86
00:05:56,000 --> 00:06:01,000
takes function that should be applied for each element that remains in the container.
87
00:06:01,000 --> 00:06:07,000
The usage of this message requires knowledge of functional programming in Java and no interfaces from
88
00:06:07,000 --> 00:06:09,000
the Java Wattyl function package.
89
00:06:10,000 --> 00:06:13,000
That's why today will not Damul work of this method.
90
00:06:13,000 --> 00:06:16,000
But we will damage it in the lesson about functional programming.
91
00:06:17,000 --> 00:06:23,000
OK, now when we know iterate the interface, I suggest learning how it works and to practice a bit.
92
00:06:24,000 --> 00:06:28,000
And I would like to visualize the way how Massaponax and remove works.
93
00:06:28,000 --> 00:06:30,000
Let's take a look at this slide.
94
00:06:30,000 --> 00:06:36,000
I want you to imagine that Iterator works like a cursor, namely at the beginning.
95
00:06:36,000 --> 00:06:38,000
It stands right before the first element.
96
00:06:39,000 --> 00:06:43,000
When we call next method, it returns the next element to us.
97
00:06:43,000 --> 00:06:49,000
And now cursor stands between the first and the second element in case we call next method one more
98
00:06:49,000 --> 00:06:55,000
time cursor is moved to the position between second and the third element like you see on the slide.
99
00:06:56,000 --> 00:07:02,000
Now, when we call remove method Iterator works as a backspace key on the Windows machines, it removes
100
00:07:02,000 --> 00:07:05,000
elements that stands right before the cursor.
101
00:07:05,000 --> 00:07:06,000
Does it make sense?
102
00:07:07,000 --> 00:07:08,000
Now let's get back to Eclipse.
103
00:07:09,000 --> 00:07:15,000
For the sake of the drama, I created this demo file to practice a bit with Iterator, let me run this
104
00:07:15,000 --> 00:07:18,000
program and walk you through the different cases that are listed here.
105
00:07:19,000 --> 00:07:24,000
At the beginning, I created the list of integers to play with, you already know this construction,
106
00:07:25,000 --> 00:07:27,000
so there is nothing special for you here.
107
00:07:27,000 --> 00:07:30,000
Now, let's iterate over each element in container.
108
00:07:31,000 --> 00:07:37,000
I call iterate a method on our list that returns iterator object parametrized by integer type.
109
00:07:37,000 --> 00:07:44,000
This means that when I will call next Masset iterate, I will reach an object of type integer like it
110
00:07:44,000 --> 00:07:49,000
specified here in Diamond Operator, but not the object of type object.
111
00:07:49,000 --> 00:07:55,000
After that we have while loop and I check in condition statement here was an iterator has an extra element
112
00:07:55,000 --> 00:07:56,000
or no.
113
00:07:56,000 --> 00:08:03,000
And if yes I want to print it to cancel next match it returns me means a reference to the next element
114
00:08:03,000 --> 00:08:04,000
in my container.
115
00:08:04,000 --> 00:08:06,000
Is everything clear here.
116
00:08:06,000 --> 00:08:10,000
Haubert is the next example is more like practical type.
117
00:08:11,000 --> 00:08:17,000
Some of my students that I taught offline feel concerned that they can use the same iterator once we
118
00:08:17,000 --> 00:08:19,000
iterate it over all elements.
119
00:08:19,000 --> 00:08:26,000
So after the previous loop, our iterator cursor is at the end of the container and has an X method
120
00:08:26,000 --> 00:08:27,000
will return false.
121
00:08:27,000 --> 00:08:31,000
That is exactly the reason why we see this console output here.
122
00:08:32,000 --> 00:08:33,000
But what to do now?
123
00:08:33,000 --> 00:08:40,000
We can use the same variable and initialize it with a new iterator object because no message to reset
124
00:08:40,000 --> 00:08:44,000
courser obliterated back again to the beginning like we did here.
125
00:08:45,000 --> 00:08:46,000
So that is fine.
126
00:08:47,000 --> 00:08:49,000
Now I want to them how remove method works.
127
00:08:50,000 --> 00:08:56,000
Let's remove all even numbers from our container we call next method to get the element from the container.
128
00:08:57,000 --> 00:09:02,000
After that, we check whether this number is A1 and if yes, then we remove it.
129
00:09:02,000 --> 00:09:06,000
You can see that I don't violate the rules of remove method usage.
130
00:09:07,000 --> 00:09:10,000
I call remove method only after I called next method.
131
00:09:11,000 --> 00:09:14,000
And also there are no multiple locations of remove method.
132
00:09:15,000 --> 00:09:22,000
You also can notice that iterator that is implemented in at least overwrites remove Masset and doesn't
133
00:09:22,000 --> 00:09:27,000
throw and supports the separation exception like the full implementation of Remove Massud does.
134
00:09:28,000 --> 00:09:33,000
Now, if you are not familiar with the exception topic yet, let me show you an example.
135
00:09:33,000 --> 00:09:36,000
What exception means and how the writer may throw exceptions.
136
00:09:37,000 --> 00:09:43,000
Lattman comments these lines of code I initialised again my iterative variable with the new iterator
137
00:09:43,000 --> 00:09:44,000
object.
138
00:09:44,000 --> 00:09:47,000
After that I call Remove Masset without calling.
139
00:09:47,000 --> 00:09:48,000
Next Masset.
140
00:09:48,000 --> 00:09:50,000
Let me run my program now.
141
00:09:50,000 --> 00:09:53,000
And here we can see illegal state exception.
142
00:09:53,000 --> 00:09:58,000
The same exceptions will be thrown in case we would call remove Massud two times in a row.
143
00:09:59,000 --> 00:10:04,000
That is something what you have to remember at the end of the lesson I will share with your home task
144
00:10:04,000 --> 00:10:09,000
where you will have opportunity to practice your skills in writing your custom iterators.
145
00:10:09,000 --> 00:10:14,000
Let me comment these lines to be able to execute code that is written after this one.
146
00:10:15,000 --> 00:10:21,000
Let me also show one more important exception that might be thrown by Iterator that is concurrent modification,
147
00:10:21,000 --> 00:10:25,000
exception and uncommon these lines of code and will damage to you.
148
00:10:26,000 --> 00:10:32,000
Imagine that we created Iterator and when we started iteration, we removed elements from the container,
149
00:10:33,000 --> 00:10:37,000
but not with the help of Iterator, but just by using the removed method of our list.
150
00:10:38,000 --> 00:10:39,000
This is just an example.
151
00:10:39,000 --> 00:10:45,000
In real life, it might happen that you created an iterator on the list that is shared between different
152
00:10:45,000 --> 00:10:50,000
threats of execution and somebody in another thread did some modifications to your list.
153
00:10:51,000 --> 00:10:56,000
And after we would call next method, we would see concurrent modification exception.
154
00:10:56,000 --> 00:11:01,000
That means somebody modified the collection after Iterator had been created.
155
00:11:02,000 --> 00:11:07,000
Iterate an object, noticed that and want to let us know that collections that we are iterating over
156
00:11:07,000 --> 00:11:09,000
is not up to date.
157
00:11:09,000 --> 00:11:15,000
And that information about elements that I will read with the help of this iterator is not relevant
158
00:11:15,000 --> 00:11:15,000
anymore.
159
00:11:16,000 --> 00:11:19,000
This type of iterator is called fail fast iterator.
160
00:11:20,000 --> 00:11:25,000
That is default implementation of iterators in majority of collection implementations that are not developed
161
00:11:25,000 --> 00:11:27,000
to be used in multithreaded environment.
162
00:11:28,000 --> 00:11:34,000
What to do in this case, in case you have iterate to make sure there is no other place in your code
163
00:11:34,000 --> 00:11:36,000
where you modify the same collection simultaneously.
164
00:11:37,000 --> 00:11:43,000
If you do modify collections from different sets of execution, then you need failsafe iterator.
165
00:11:43,000 --> 00:11:47,000
That is a second type of iterator that usually called failsafe.
166
00:11:48,000 --> 00:11:53,000
Let me Corman's the concurrent modification demo code to be able to proceed with the next one and I
167
00:11:53,000 --> 00:11:55,000
ran the program again.
168
00:11:55,000 --> 00:12:02,000
Usually thread safe implementation of collections also implements failsafe iterator to explain in short
169
00:12:02,000 --> 00:12:04,000
how it works without going deep into the details.
170
00:12:05,000 --> 00:12:11,000
Failsafe Iterate that makes a copy of the internal data structure and iterate over the corporate data
171
00:12:11,000 --> 00:12:11,000
structure.
172
00:12:12,000 --> 00:12:17,000
And a structural modification done to the Iterator doesn't affect the copied data structure.
173
00:12:17,000 --> 00:12:20,000
So original data structure is changed.
174
00:12:21,000 --> 00:12:26,000
This type of iterator creates a snapshot and iterate over elements in this snapshot.
175
00:12:27,000 --> 00:12:30,000
The drawback of such iterator type is obvious.
176
00:12:30,000 --> 00:12:36,000
In some cases, you may not receive latest and up to date version of elements in case collection is
177
00:12:36,000 --> 00:12:38,000
modified from the different threats.
178
00:12:39,000 --> 00:12:41,000
But sometimes it might be not critical for you.
179
00:12:42,000 --> 00:12:48,000
Here we have thread safe list implementation copy and write a list I initialize.
180
00:12:48,000 --> 00:12:50,000
It was elements that are in our integers list.
181
00:12:51,000 --> 00:12:55,000
I create iterator interface of the that is the same everywhere.
182
00:12:56,000 --> 00:12:58,000
That's why I use the same variables that I had created.
183
00:12:59,000 --> 00:13:05,000
As I already mentioned, failsafe iterators creates a snapshot of the container to prove this.
184
00:13:05,000 --> 00:13:13,000
Here I add another integer to this container and now when I iterate over elements and as in previous
185
00:13:13,000 --> 00:13:15,000
example, I remove elements from collection.
186
00:13:15,000 --> 00:13:19,000
Without Iterator, I still bring elements from the container to the console.
187
00:13:20,000 --> 00:13:23,000
But why not print the collection to console?
188
00:13:23,000 --> 00:13:27,000
It has only one number that we added after iterator creation.
189
00:13:27,000 --> 00:13:33,000
This proves that Iterator creates a snapshot with elements, and this snapshot is not updated as we
190
00:13:33,000 --> 00:13:36,000
update collection after creation of Iterator.
191
00:13:37,000 --> 00:13:41,000
There is also a third type of iterator that is called weakly consistent.
192
00:13:42,000 --> 00:13:48,000
It is called so because this type of iterator can reflect some, but not necessarily all of the changes
193
00:13:48,000 --> 00:13:52,000
that have been made to the collection since Iterator is created.
194
00:13:52,000 --> 00:13:53,000
Let me show you this.
195
00:13:53,000 --> 00:14:00,000
I declare a new variable of collection type parametrized with integer type an aggregate object of concurrent
196
00:14:00,000 --> 00:14:01,000
linked deck.
197
00:14:01,000 --> 00:14:05,000
This collection implementation has weekly consistent Iterator implementation.
198
00:14:06,000 --> 00:14:11,000
I create an iterator and now attention similar to the previous example.
199
00:14:11,000 --> 00:14:14,000
I add new integer here and now.
200
00:14:14,000 --> 00:14:20,000
When I'm iterating over each element, I can see that new integer already was taken into account here.
201
00:14:21,000 --> 00:14:26,000
But as it is said in the documentation, there is no guarantee that all updates to the collection will
202
00:14:26,000 --> 00:14:31,000
be taken into account by the moment Iterator would reach the specific element.
203
00:14:31,000 --> 00:14:34,000
I understand now what is really consistent iterator.
204
00:14:35,000 --> 00:14:39,000
So now we may say that we learned three types of the iterator.
205
00:14:39,000 --> 00:14:44,000
The last thing that I would like to learn with you today is a list iterator.
206
00:14:44,000 --> 00:14:46,000
Let's look at this interface.
207
00:14:46,000 --> 00:14:51,000
The first thing that you can see is that list rate that extends iterate the interface.
208
00:14:52,000 --> 00:14:58,000
The main feature that is introduced list, right, is to iterate over elements in the reverse direction.
209
00:14:58,000 --> 00:15:04,000
If Iterator can go over elements from the beginning to the end, the list rate that can go from the
210
00:15:04,000 --> 00:15:06,000
end to the beginning.
211
00:15:06,000 --> 00:15:12,000
It also declares mass that absent in iterator interface, Zaya has Hesperus.
212
00:15:12,000 --> 00:15:14,000
It is similar to his next.
213
00:15:14,000 --> 00:15:21,000
But check if there any element in another direction, previs returns the reference to the previous element
214
00:15:21,000 --> 00:15:29,000
in the container next index to get the index of the next element, previous index it returns.
215
00:15:29,000 --> 00:15:36,000
The element that would be returned by previous MassArt set replaces the last element that was returned.
216
00:15:36,000 --> 00:15:38,000
And this is important to understand.
217
00:15:39,000 --> 00:15:46,000
It replaces elements that was returned after the next or previous method in case that method is called
218
00:15:46,000 --> 00:15:51,000
without calling next the previous method before that illegal state exception strong.
219
00:15:51,000 --> 00:15:59,000
Add method adds element to the container so you can see a few more important features of the list iterator.
220
00:15:59,000 --> 00:16:05,000
It also allows us to add element to the container during the iteration over elements or to substitute
221
00:16:05,000 --> 00:16:05,000
elements.
222
00:16:06,000 --> 00:16:08,000
Let's look at the list, iterator them.
223
00:16:08,000 --> 00:16:11,000
Now, I created a separate file for that.
224
00:16:11,000 --> 00:16:13,000
Let me also execute this program.
225
00:16:14,000 --> 00:16:17,000
I have the same container was integers as in previous example.
226
00:16:17,000 --> 00:16:19,000
The list interface declares list.
227
00:16:19,000 --> 00:16:20,000
Iterate the method.
228
00:16:20,000 --> 00:16:25,000
As you remember, this method returns as the objects of list iterator type.
229
00:16:26,000 --> 00:16:27,000
One more interesting feature.
230
00:16:27,000 --> 00:16:31,000
We can get at least iterator from the specific position if we need.
231
00:16:31,000 --> 00:16:36,000
I can't imagine the case when I would use it, but it is interesting feature to know about.
232
00:16:36,000 --> 00:16:39,000
List Iterator, for example.
233
00:16:39,000 --> 00:16:41,000
Here I set List Iterator as a second index.
234
00:16:42,000 --> 00:16:48,000
Here is a position of the cursor in the index zero here, position of the cursor in the index one and
235
00:16:48,000 --> 00:16:49,000
here is two.
236
00:16:50,000 --> 00:16:54,000
So the next goal of the previous method should return number two.
237
00:16:55,000 --> 00:16:59,000
And now you can see in the console output that two is returned.
238
00:16:59,000 --> 00:17:02,000
Now I want to update this element.
239
00:17:02,000 --> 00:17:06,000
I call set method and pass twenty two this method.
240
00:17:06,000 --> 00:17:10,000
So the elements that was returned previously is substituted with twenty.
241
00:17:11,000 --> 00:17:17,000
So my next goal of the next method should return twenty and he and console you can see at least Iterator
242
00:17:17,000 --> 00:17:20,000
works exactly in the way we expect it to work.
243
00:17:21,000 --> 00:17:27,000
In case I want to add an element with the help of this iterator, I call add method and the item is
244
00:17:27,000 --> 00:17:29,000
inserted right before the cursor.
245
00:17:30,000 --> 00:17:36,000
So in case I added twenty one, I can get it now by calling the previous method and here's twenty one
246
00:17:37,000 --> 00:17:42,000
and remove mass at the last item that was returned either by next or previous method.
247
00:17:43,000 --> 00:17:50,000
In this case after location of remove method twenty one will be removed and here we printed all elements
248
00:17:50,000 --> 00:17:51,000
to console to prove this.
249
00:17:52,000 --> 00:17:57,000
Now, I believe you have a full understanding of how Étretat enlisted radar works.
250
00:17:57,000 --> 00:17:59,000
Let's recap what we have learned today.
251
00:18:00,000 --> 00:18:02,000
Today, we learned what iterable is.
252
00:18:02,000 --> 00:18:06,000
We also understand what Iterator is now.
253
00:18:06,000 --> 00:18:12,000
We know the difference between these two interfaces when real examples, we saw how Iterator works in
254
00:18:12,000 --> 00:18:13,000
this lesson.
255
00:18:13,000 --> 00:18:18,000
We saw what exceptions might be thrown by iterator, including concurrent modification, exception,
256
00:18:18,000 --> 00:18:23,000
illegal state exception, unsupported aliment exception and no such aliment exception.
257
00:18:24,000 --> 00:18:29,000
We learned three types of iterator fail fast, fail safe and weakly consistent.
258
00:18:30,000 --> 00:18:34,000
And at the end of the lesson we learned at least iterator and how it works.
259
00:18:34,000 --> 00:18:36,000
Now let's review your homework.
260
00:18:37,000 --> 00:18:43,000
In short, you have to coordinate exercises here, you have to implement Iterator and Lisa the for the
261
00:18:43,000 --> 00:18:50,000
default Miley's class that you implemented in scoping her homework about lists, read attentively all
262
00:18:50,000 --> 00:18:54,000
the requirements here I prepared for you method signatures and description of interfaces.
263
00:18:55,000 --> 00:18:57,000
All you have to do is implement methods.
264
00:18:58,000 --> 00:19:03,000
You will see here some requirements related to exceptions in case you are not familiar with exceptions
265
00:19:03,000 --> 00:19:04,000
topic.
266
00:19:04,000 --> 00:19:09,000
There is absolutely no harm because I wrote the line of code that you have to write.
267
00:19:09,000 --> 00:19:15,000
One exceptions should be thrown that said, don't skip this homework.
268
00:19:15,000 --> 00:19:17,000
It is important for understanding of the topic.
269
00:19:18,000 --> 00:19:19,000
Thanks a lot for your attention.
270
00:19:19,000 --> 00:19:21,000
See you in the next lesson.