Tan115's picture
Add files using upload-large-folder tool
2e5dac7 verified
Raw
History Blame Contribute Delete
12.1 kB
1
00:00:05,000 --> 00:00:10,000
Hello, dear students in this class, and we are going to talk about one more implementation of map
2
00:00:10,000 --> 00:00:16,000
interface linked hash map, we're going to understand how the hash map is different from hash map will
3
00:00:16,000 --> 00:00:20,000
review structure of link, hash map and we'll review methods that it has.
4
00:00:21,000 --> 00:00:26,000
I'm going to explain to you what the cash is and how we can implement our own cash with the help of
5
00:00:26,000 --> 00:00:27,000
the hash map.
6
00:00:27,000 --> 00:00:32,000
Also, we'll learn how to implement logic that would keep fixed number of elements in our linked hash
7
00:00:32,000 --> 00:00:33,000
map object.
8
00:00:33,000 --> 00:00:36,000
Let's start to understand how linked hash map work.
9
00:00:36,000 --> 00:00:38,000
Let's look at this slide.
10
00:00:38,000 --> 00:00:44,000
First of all, what we have to understand is that hash map is also implemented on the base of hash table.
11
00:00:44,000 --> 00:00:47,000
Then hash map has projectable iteration order.
12
00:00:48,000 --> 00:00:49,000
How is this achieved?
13
00:00:49,000 --> 00:00:53,000
It is achieved because of the support of double placed inside.
14
00:00:53,000 --> 00:00:54,000
On the screen.
15
00:00:54,000 --> 00:00:59,000
You can see the image that represents the structure of each bucket and hash table and in addition to
16
00:00:59,000 --> 00:01:03,000
that, the properties that allows us to link elements in both directions.
17
00:01:04,000 --> 00:01:10,000
That's why when we insert each new entry in the hash map, each entry now is about the next and previous
18
00:01:10,000 --> 00:01:15,000
entry that allows us to iterate over this data structure with predictable order.
19
00:01:16,000 --> 00:01:20,000
There are also a few more differences in length hash map that I would like to show you in the source
20
00:01:20,000 --> 00:01:20,000
code.
21
00:01:21,000 --> 00:01:24,000
Here is a source code of linked hash map class.
22
00:01:24,000 --> 00:01:29,000
Notice that it extends hash map class and implements map interface.
23
00:01:29,000 --> 00:01:35,000
I'd like to draw attention to the special constructor that also takes Boolean Flag as one of the arguments.
24
00:01:35,000 --> 00:01:41,000
This documentation set that we have to pass through for access, order and force for insertion order.
25
00:01:41,000 --> 00:01:47,000
When I read this first time for me it is not obvious what is the difference between axis order and insertion
26
00:01:47,000 --> 00:01:47,000
order.
27
00:01:48,000 --> 00:01:51,000
I would say that these are two a different order mechanism.
28
00:01:51,000 --> 00:01:58,000
By default it is insertion order, but we can set access order by passing through into this constructor
29
00:01:59,000 --> 00:01:59,000
access.
30
00:01:59,000 --> 00:02:05,000
So the strategy will ensure that order of iteration of elements is the order of in which the elements
31
00:02:05,000 --> 00:02:10,000
were last accessed from the list recently accessed, the most recently accessed.
32
00:02:10,000 --> 00:02:13,000
You might be wondering when this can be used.
33
00:02:13,000 --> 00:02:18,000
I know that the things are better learned when you know that you can apply your knowledge and practice
34
00:02:19,000 --> 00:02:22,000
access order maybe come in handy when you want to implement cache.
35
00:02:23,000 --> 00:02:23,000
Probably.
36
00:02:24,000 --> 00:02:25,000
You heard those words the first time.
37
00:02:25,000 --> 00:02:27,000
Let me explain you what a cache is.
38
00:02:28,000 --> 00:02:35,000
Cash is a hardware or software component that stores data so that future requests for that data can
39
00:02:35,000 --> 00:02:36,000
be served faster.
40
00:02:36,000 --> 00:02:42,000
The data stored in the cache might be as a result of an earlier computation or a copy of data stored
41
00:02:42,000 --> 00:02:43,000
elsewhere.
42
00:02:43,000 --> 00:02:48,000
For example, you can always keep in cache information about products that attribute most of the times
43
00:02:49,000 --> 00:02:52,000
to save time on retrieving all information for product details.
44
00:02:52,000 --> 00:02:53,000
Page.
45
00:02:53,000 --> 00:02:59,000
We can just store these products in cash and retrieve them only when it is needed to be cost effective
46
00:02:59,000 --> 00:03:03,000
and to enable efficient use of data caches must be relatively small.
47
00:03:04,000 --> 00:03:09,000
That's why there are several content eviction policies that keep size of the cache fixed.
48
00:03:09,000 --> 00:03:12,000
Sometimes it is also called cache replacements.
49
00:03:12,000 --> 00:03:13,000
Algorithms.
50
00:03:14,000 --> 00:03:19,000
Once a cash flow algorithm should choose which items to discard to make room for the new ones.
51
00:03:20,000 --> 00:03:23,000
There really a lot of different election policies.
52
00:03:23,000 --> 00:03:27,000
Some of them are first in, first out, last in, first out.
53
00:03:28,000 --> 00:03:33,000
You already know what FCF oh, and LIFO means last recently used.
54
00:03:34,000 --> 00:03:38,000
According to the strategy, we discard elements that were not used for a long time.
55
00:03:38,000 --> 00:03:43,000
The logic that stands behind that is in the case element is not used.
56
00:03:43,000 --> 00:03:48,000
There is no science to keep it in cash and it is better to substitute it with a new element.
57
00:03:49,000 --> 00:03:56,000
And in case here is a good new element already in the element that counts as usage and element is moved
58
00:03:56,000 --> 00:04:00,000
on the new place in this data structure to not be removed.
59
00:04:01,000 --> 00:04:03,000
By the way, this is one of the most popular ones.
60
00:04:04,000 --> 00:04:10,000
You're going to have a homework to implement your own cache with the help of the hash map most recently
61
00:04:10,000 --> 00:04:11,000
used the eviction strategy.
62
00:04:12,000 --> 00:04:15,000
It works in the opposite way from least recently use cache.
63
00:04:15,000 --> 00:04:17,000
Among the other eviction strategies.
64
00:04:17,000 --> 00:04:24,000
It is also possible to mention random replacement, least frequently used, least frequently recently
65
00:04:24,000 --> 00:04:25,000
used, etc..
66
00:04:26,000 --> 00:04:31,000
So I believe now when you know what the cache is, you can imagine how we can use length hash laced
67
00:04:31,000 --> 00:04:32,000
to implement cache.
68
00:04:33,000 --> 00:04:39,000
The Access Order EnLink hash map allows us to implement LRU cache an easy way, but what else?
69
00:04:39,000 --> 00:04:42,000
We need to implement cache with the help of the cache map.
70
00:04:43,000 --> 00:04:49,000
We need to set the size of our cash and then cache map can help us to support fixed size of our cache.
71
00:04:50,000 --> 00:04:56,000
How not to get back to the source code in the source code of link Hashmat we can find Remove Alessandri
72
00:04:56,000 --> 00:04:57,000
remastered.
73
00:04:57,000 --> 00:05:03,000
This method is invoked by Puth and put all methods after incertain and you entry into the map.
74
00:05:03,000 --> 00:05:08,000
And in case this message returns through, that means maps should remove its earliest entry.
75
00:05:09,000 --> 00:05:12,000
You can see that it has protected access modifier.
76
00:05:12,000 --> 00:05:18,000
That means it is not available by default outside of this package and outside of this class and its
77
00:05:18,000 --> 00:05:19,000
child classes.
78
00:05:19,000 --> 00:05:25,000
The idea is, in case you have to implement cash, we have to override this method and implement the
79
00:05:25,000 --> 00:05:29,000
rule that would tell us when we have to remove the Elvis element.
80
00:05:29,000 --> 00:05:30,000
Does it make sense?
81
00:05:31,000 --> 00:05:35,000
And prepare, for example, to show you this, here is a class that extends length.
82
00:05:35,000 --> 00:05:42,000
Hashmat, I also declared filled with a name capacity that contains the value of max elements in the
83
00:05:42,000 --> 00:05:46,000
current map, how elements will be removed automatically.
84
00:05:46,000 --> 00:05:49,000
I will let little hash map to handle or remorse.
85
00:05:50,000 --> 00:05:56,000
What I have to do is to override or remove Alessandri and return true when elements should be removed
86
00:05:56,000 --> 00:05:56,000
from map.
87
00:05:57,000 --> 00:06:04,000
So when the size of map will become more than capacity, then we have to remove the our capacity by
88
00:06:04,000 --> 00:06:06,000
default is three elements.
89
00:06:06,000 --> 00:06:11,000
Now, let me create the object of the current class and add four entries here.
90
00:06:11,000 --> 00:06:14,000
By default, I insertion order.
91
00:06:14,000 --> 00:06:20,000
And that means that when I add force element, the first one should be removed here.
92
00:06:20,000 --> 00:06:21,000
Aberrant elements to cancel.
93
00:06:22,000 --> 00:06:25,000
Let me run the program to show you console output.
94
00:06:25,000 --> 00:06:28,000
And here we can see that the first entry is removed.
95
00:06:29,000 --> 00:06:35,000
Now you have enough information that will help you to implement your homework from the public interface
96
00:06:35,000 --> 00:06:36,000
that link Hashmat provides.
97
00:06:36,000 --> 00:06:43,000
There is no massive that present in this class and absent in hash map since this class extends Hashmat.
98
00:06:43,000 --> 00:06:48,000
That means all methods that were reviewed and Hashmat lesson and that were reviewed during the review
99
00:06:48,000 --> 00:06:53,000
of map interface are also available for objects of the hash map type.
100
00:06:53,000 --> 00:06:56,000
That's why we want to review those methods again.
101
00:06:57,000 --> 00:07:00,000
So that's all what I wanted to share with you regarding the hash map.
102
00:07:01,000 --> 00:07:06,000
Now let's recap what we have learned today in this lesson we reviewed and in fact, map class.
103
00:07:07,000 --> 00:07:11,000
We learned how law enforcement works and what are key features of this type.
104
00:07:11,000 --> 00:07:17,000
Now we know what the difference between insertion, order and access order is and how to change the
105
00:07:17,000 --> 00:07:18,000
smooth inline hash map.
106
00:07:19,000 --> 00:07:21,000
After that, we learned what a cache is.
107
00:07:22,000 --> 00:07:27,000
Now, you know, the theory of different election policies and you know that Lenfest map can be used
108
00:07:27,000 --> 00:07:28,000
to create LRU cache.
109
00:07:29,000 --> 00:07:34,000
Also, we learned how to override the method that would keep constant number of elements.
110
00:07:34,000 --> 00:07:35,000
EnLink hash map.
111
00:07:35,000 --> 00:07:37,000
Now I suggest reviewing your homework.
112
00:07:38,000 --> 00:07:43,000
You have to implement Alario Cash on the basis of little cash map here.
113
00:07:43,000 --> 00:07:46,000
I provided you with an interface that you have to implement.
114
00:07:46,000 --> 00:07:52,000
According to this task, you have to implement three methods yet that returns value by key on minus
115
00:07:52,000 --> 00:07:54,000
one in case the key is not found.
116
00:07:55,000 --> 00:08:01,000
Good method that should put key value pair of jeans or update the value for key if such already exists
117
00:08:02,000 --> 00:08:07,000
and set capacity method that sets maximum number of elements that can be stored in cash.
118
00:08:08,000 --> 00:08:12,000
Try to use knowledge that you gained in this lesson to implement this task.
119
00:08:12,000 --> 00:08:16,000
I also share my solution for this task in attachments to this lesson.
120
00:08:16,000 --> 00:08:19,000
After you're done, you can compare two solutions if you wish.
121
00:08:20,000 --> 00:08:21,000
That's all for today.
122
00:08:22,000 --> 00:08:23,000
Thanks a lot for your attention.
123
00:08:23,000 --> 00:08:25,000
See you in the next lesson.