Download 19 - Java Collections Framework/016 LinkedHashMap_en.srt from Tan115/java-development-for-beginners-learnit: direct link, hf CLI and curl.
- Browser
- Download file 12.1 kB
-
https://huggingface.co/Tan115/java-development-for-beginners-learnit/resolve/main/19%20-%20Java%20Collections%20Framework/016%20LinkedHashMap_en.srt
- Command line
-
hf download 'hf://Tan115/java-development-for-beginners-learnit/19 - Java Collections Framework/016 LinkedHashMap_en.srt'
-
curl -L -o '016 LinkedHashMap_en.srt' https://huggingface.co/Tan115/java-development-for-beginners-learnit/resolve/main/19%20-%20Java%20Collections%20Framework/016%20LinkedHashMap_en.srt
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. | |