1 00:00:06,000 --> 00:00:11,000 Hello, dear students, today we have important topic we are going to review another Iraq of Java collections 2 00:00:11,000 --> 00:00:14,000 framework that is MOP Iraqi today. 3 00:00:14,000 --> 00:00:16,000 We are going to run map interface. 4 00:00:16,000 --> 00:00:20,000 We are also going to review such interfaces like sorted map and navigable map. 5 00:00:21,000 --> 00:00:26,000 I'm going to hold overview of implementations of map interface and what features they have. 6 00:00:27,000 --> 00:00:32,000 Also, we'll talk about what the dictionary is and how hash tablecloth is different from hash map. 7 00:00:32,000 --> 00:00:37,000 After we learn, Ceri will focus on map interface and its methods. 8 00:00:37,000 --> 00:00:39,000 Your review of map interface. 9 00:00:39,000 --> 00:00:41,000 We also will learn what entry type is. 10 00:00:42,000 --> 00:00:46,000 As you can see that we have a lot of things to learn in our plans. 11 00:00:46,000 --> 00:00:53,000 Let's start and I'd like to start with you from the overview of Map Iraqi first and the key features 12 00:00:53,000 --> 00:00:53,000 of MAP. 13 00:00:54,000 --> 00:01:00,000 And after we learn this, we are going to dive deeper in the details to investigate each interface in 14 00:01:00,000 --> 00:01:04,000 particular on the top of our Iraqi, we have map interface. 15 00:01:04,000 --> 00:01:07,000 This type exists to map keys to values. 16 00:01:07,000 --> 00:01:11,000 All keys are unique, various may be duplicated. 17 00:01:11,000 --> 00:01:15,000 And there are a lot of places and our programs where we can apply map implementations. 18 00:01:16,000 --> 00:01:22,000 If you remember on one of the lessons I showed you example of mobile app for sports betting tips, for 19 00:01:22,000 --> 00:01:26,000 example, we can receive from server a lot of sports events. 20 00:01:26,000 --> 00:01:33,000 After that, we can group them by date and your keyword would be the specific date and the value would 21 00:01:33,000 --> 00:01:38,000 be a collection of sporting events on this day or another example, recently you have implemented Home 22 00:01:38,000 --> 00:01:40,000 Task Help Desk. 23 00:01:40,000 --> 00:01:41,000 In that task. 24 00:01:41,000 --> 00:01:44,000 You also could use map implementations to map support. 25 00:01:44,000 --> 00:01:47,000 Request type was its priority. 26 00:01:47,000 --> 00:01:53,000 In this case, support request type would be the key and it will be unique and priority would be the 27 00:01:53,000 --> 00:01:55,000 value and can be duplicated. 28 00:01:56,000 --> 00:02:01,000 And I keep creating examples on the fly because there really are a lot of cases where you need some 29 00:02:01,000 --> 00:02:04,000 data structure where you would store key value pass. 30 00:02:04,000 --> 00:02:07,000 OK, so we really understood why we need map. 31 00:02:07,000 --> 00:02:14,000 Now let's understand what specific different implementations of map interface have abstract map use 32 00:02:14,000 --> 00:02:21,000 implementations for some of the methods of map interface, hash map implementation of map interface. 33 00:02:21,000 --> 00:02:27,000 IT stores element using the mechanism of hash tables that guarantees constant amount of time for each 34 00:02:27,000 --> 00:02:29,000 region and place elements. 35 00:02:29,000 --> 00:02:33,000 That's why everyone loves hash map linked hash map. 36 00:02:33,000 --> 00:02:38,000 Besides storing elements also memorized the sequence of adding entries in the map. 37 00:02:39,000 --> 00:02:46,000 So the order of elements during the iteration is predictable because linked hash map maintains the list 38 00:02:46,000 --> 00:02:48,000 ran through all of its entries. 39 00:02:48,000 --> 00:02:55,000 If we need thread safe implementation of the map, we would opt for concurrent hash map that implements 40 00:02:55,000 --> 00:02:56,000 concurrent map. 41 00:02:56,000 --> 00:02:58,000 That in turn extends map interface. 42 00:02:59,000 --> 00:03:03,000 We have a few more interfaces that extend map interface. 43 00:03:03,000 --> 00:03:10,000 Zaya sorted map and navigable map sort of map provides ordering of a map based on its case. 44 00:03:11,000 --> 00:03:17,000 The map is ordered according to the natural order of its keys that is defined according to implementation 45 00:03:17,000 --> 00:03:25,000 of comparable interface or alternatively, Solin order may be defined by comparator navigable map extensors 46 00:03:25,000 --> 00:03:31,000 map and provides developers with possibility to return the closest matches for given such targets. 47 00:03:31,000 --> 00:03:38,000 The most popular implementations of this interface are three map and concurrence key place map for multithreaded 48 00:03:38,000 --> 00:03:39,000 environment. 49 00:03:40,000 --> 00:03:42,000 We also have APSA class dictionary. 50 00:03:42,000 --> 00:03:48,000 How it is different from the map interface you can reclass was created in Java version one and supposed 51 00:03:48,000 --> 00:03:52,000 to be a parent class for all types that map keys to values. 52 00:03:52,000 --> 00:03:58,000 Since multiple inheritance in Java is not supported by the map interface was introduced in Java version 53 00:03:58,000 --> 00:03:58,000 two. 54 00:03:59,000 --> 00:04:05,000 So I would say that dictionary is an old version of map interface and that is considered as an obsolete 55 00:04:05,000 --> 00:04:07,000 and use of map is preferred. 56 00:04:08,000 --> 00:04:13,000 But still, you might be asked about dictionary during the interview and for your common Java literacy, 57 00:04:13,000 --> 00:04:15,000 you have to be aware about it. 58 00:04:16,000 --> 00:04:21,000 Hash table is a concrete class that extends the dictionary type and internments map interface. 59 00:04:22,000 --> 00:04:27,000 It was considered as a thread safe version of hash map unless concurrent hash map was introduced in 60 00:04:27,000 --> 00:04:33,000 Java version five, the synchronization mechanism is not so efficient as it is implemented in concurrent 61 00:04:33,000 --> 00:04:37,000 Hashmat, in case you are not familiar with the trending topic. 62 00:04:37,000 --> 00:04:42,000 That would explain the difference in the implementation of low interest rate and support in these classes. 63 00:04:42,000 --> 00:04:46,000 In simple words, hash table closes the door in your home. 64 00:04:46,000 --> 00:04:53,000 Concurrent hash map closes a separate doors in your home to allow everyone to walk around the home until 65 00:04:53,000 --> 00:04:54,000 only one room is closed. 66 00:04:55,000 --> 00:05:01,000 Can you feel the difference in implementation of concurrency support in these two classes and meet later 67 00:05:01,000 --> 00:05:02,000 in the separate lessons? 68 00:05:02,000 --> 00:05:08,000 We are going to learn multithreaded together and we will get back to a thread safe map implementations. 69 00:05:09,000 --> 00:05:11,000 That's how MAP Iraqis look like. 70 00:05:11,000 --> 00:05:16,000 Before we proceed with the details, I want to finish the topic of differences between hash map and 71 00:05:16,000 --> 00:05:17,000 hash table. 72 00:05:18,000 --> 00:05:24,000 So the first thing that is different we already discussed on MassArt and hash table are synchronized. 73 00:05:24,000 --> 00:05:28,000 And that's why hash table is considered to be a thread safe map. 74 00:05:28,000 --> 00:05:33,000 Hash table also does not allow news, a new case nor new values. 75 00:05:33,000 --> 00:05:39,000 On the other hand, hash map allows us to store one key and multiple values. 76 00:05:39,000 --> 00:05:43,000 Hash table is a legacy class, whereas hash map is newer. 77 00:05:44,000 --> 00:05:50,000 And now I suggest opening the source code of map interface to learn that the communication and methods 78 00:05:50,000 --> 00:05:53,000 of this interface here is map interface. 79 00:05:53,000 --> 00:06:00,000 Pay attention to this interface doesn't extend iterable interface like collection while review and map 80 00:06:00,000 --> 00:06:00,000 interface. 81 00:06:00,000 --> 00:06:06,000 I'm going to use and work by saying entry, I would always mean the key value pair. 82 00:06:06,000 --> 00:06:11,000 Is it clear, for example, size returns, amount of entries in the map. 83 00:06:12,000 --> 00:06:16,000 In other words, a number of key value pairs is empty. 84 00:06:16,000 --> 00:06:18,000 This is self-described Macit. 85 00:06:18,000 --> 00:06:25,000 It checks whether the current map is empty or no, contains key verifies whether a map contains specific 86 00:06:25,000 --> 00:06:32,000 contains value, similar method to check value in map, yet method to get value from the map we have 87 00:06:32,000 --> 00:06:32,000 to use. 88 00:06:33,000 --> 00:06:37,000 So we ask you to get Masset to retrieve our value. 89 00:06:37,000 --> 00:06:39,000 There is no method in map. 90 00:06:39,000 --> 00:06:41,000 Instead, we have put method. 91 00:06:41,000 --> 00:06:44,000 We can put key value pair in map. 92 00:06:44,000 --> 00:06:47,000 That's why put method takes two arguments. 93 00:06:48,000 --> 00:06:50,000 Pay attention to the return tab here. 94 00:06:50,000 --> 00:06:56,000 Imagine that you put in map integer value one and some customer reference type user as a value to the 95 00:06:56,000 --> 00:07:01,000 map in this case, but will return now and now. 96 00:07:01,000 --> 00:07:07,000 Imagine that you put new value but with the same key you call put MassArt again was integer value one 97 00:07:07,000 --> 00:07:09,000 and new user object. 98 00:07:09,000 --> 00:07:15,000 In this case, both method will return the value that was previously associated with the key. 99 00:07:15,000 --> 00:07:16,000 That means previous user. 100 00:07:17,000 --> 00:07:18,000 Does it make sense? 101 00:07:18,000 --> 00:07:24,000 If you want to remove some entry from the map, you have to call remove Masset and Paskey as a method 102 00:07:24,000 --> 00:07:29,000 argument map interface, declare methods for bulk operations, for example. 103 00:07:29,000 --> 00:07:33,000 Put all method can add all entries from one object to another. 104 00:07:34,000 --> 00:07:35,000 Clear message. 105 00:07:35,000 --> 00:07:38,000 Remove all mappings from the current map object. 106 00:07:38,000 --> 00:07:44,000 He has said massive returns contain the offset type that contains only keys from this map object. 107 00:07:44,000 --> 00:07:45,000 Why set? 108 00:07:46,000 --> 00:07:48,000 Because all keys are unique and map. 109 00:07:48,000 --> 00:07:51,000 That's why I said type is returned. 110 00:07:51,000 --> 00:07:57,000 In case we want to retrieve all whaler's from the map, we have to call values method that returns collection 111 00:07:57,000 --> 00:07:58,000 of elements. 112 00:07:58,000 --> 00:07:59,000 Why collection? 113 00:08:00,000 --> 00:08:03,000 Because values are not unique and collection is returned. 114 00:08:04,000 --> 00:08:10,000 Here's one more very useful method and set this massive return set of entries of this map. 115 00:08:10,000 --> 00:08:15,000 Each key value pair is represented as a single object of type entry. 116 00:08:15,000 --> 00:08:17,000 You really understand why set returned? 117 00:08:18,000 --> 00:08:23,000 Because each key value pair is unique and three is in our interface in map. 118 00:08:24,000 --> 00:08:25,000 Let's look at it. 119 00:08:25,000 --> 00:08:29,000 Entry type has to match assets that are used more often than others. 120 00:08:29,000 --> 00:08:32,000 They are yet key and get value. 121 00:08:32,000 --> 00:08:39,000 For example, we can iterate over a set of entries in foreach loop and in the foreach loop body we can 122 00:08:39,000 --> 00:08:42,000 use reference to the entry object together is a key or value. 123 00:08:43,000 --> 00:08:45,000 It depends on what exactly we need. 124 00:08:45,000 --> 00:08:46,000 According to our logic. 125 00:08:47,000 --> 00:08:51,000 There are also other methods that data on my opinion are not used very often. 126 00:08:51,000 --> 00:08:53,000 For example, set value. 127 00:08:53,000 --> 00:08:57,000 It allows us to set value associated with the current key in the entry. 128 00:08:57,000 --> 00:09:03,000 In my opinion, if there would be such need, I mean to update the value associated with a specific 129 00:09:03,000 --> 00:09:09,000 key, most likely you want to do this with entry time, but instead we'll just call good method with 130 00:09:09,000 --> 00:09:12,000 the same key on map object to update the value. 131 00:09:13,000 --> 00:09:18,000 But probably one day you would face with the case that while iterating over entries, you need to implement 132 00:09:18,000 --> 00:09:24,000 logic that under some specific conditions you have to update value that is associated with a specific 133 00:09:24,000 --> 00:09:25,000 key. 134 00:09:25,000 --> 00:09:29,000 And for this case, you already know what method can help you with that. 135 00:09:30,000 --> 00:09:32,000 You can see equals and hash code. 136 00:09:32,000 --> 00:09:38,000 You already know these methods and also entry has a few interesting static methods. 137 00:09:38,000 --> 00:09:41,000 We are going to use them in our next lessons. 138 00:09:41,000 --> 00:09:41,000 Right now. 139 00:09:41,000 --> 00:09:48,000 Let me explain you and see what I say about we have comparing biochem assets at source entries by case 140 00:09:48,000 --> 00:09:55,000 in case there implement comparable interface and we compare the parameter in case keys don't implement 141 00:09:55,000 --> 00:09:56,000 comparable interface. 142 00:09:57,000 --> 00:10:03,000 These methods return compared to that we can use to search and now attention to search our entries set, 143 00:10:04,000 --> 00:10:06,000 but not elements in map bytes key. 144 00:10:07,000 --> 00:10:12,000 And we also have comparing by value method that returns comparisons that can compare entries set by 145 00:10:12,000 --> 00:10:13,000 values. 146 00:10:13,000 --> 00:10:16,000 Imagine that you want to search your map by. 147 00:10:16,000 --> 00:10:21,000 Well, to be honest, compared to that source, my case is not so cool. 148 00:10:21,000 --> 00:10:21,000 Why? 149 00:10:22,000 --> 00:10:27,000 Because we can create object of three map and put all elements from any map there and elements will 150 00:10:27,000 --> 00:10:31,000 be sorted automatically by case, but sorting by various. 151 00:10:31,000 --> 00:10:36,000 That is really helpful compared to now when we answer it, what entry type is. 152 00:10:36,000 --> 00:10:43,000 Let's investigate what matters are left here in the map interface equals and hash good methods and. 153 00:10:44,000 --> 00:10:49,000 The default message I described, for example, here is interesting and useful message. 154 00:10:49,000 --> 00:10:55,000 Imagine that you need to get away from that, but you don't want to get new in case Element is absent 155 00:10:55,000 --> 00:10:56,000 in map. 156 00:10:56,000 --> 00:11:03,000 Instead, you would like to get some default value we can call yet or default to retrieve element by 157 00:11:03,000 --> 00:11:09,000 key in case and market for such key present or to return default value in case there is no mapping for 158 00:11:09,000 --> 00:11:10,000 such key. 159 00:11:10,000 --> 00:11:17,000 Pay attention to the fact that in case we exist and values that is associated with this key is no value, 160 00:11:18,000 --> 00:11:19,000 then no will be returned. 161 00:11:20,000 --> 00:11:24,000 Default value will be returned only in case there is no such key in the map. 162 00:11:25,000 --> 00:11:30,000 For each matsutake takes function that should be applied for each and every one will return functional 163 00:11:30,000 --> 00:11:31,000 programming with Java. 164 00:11:32,000 --> 00:11:34,000 That will show you how you can apply this method. 165 00:11:35,000 --> 00:11:41,000 Replace all text functions that will be applied to each entry and each entry in turn will be substituted 166 00:11:41,000 --> 00:11:44,000 with the result that will be returned by this function. 167 00:11:44,000 --> 00:11:51,000 But if absent method should be used when you don't want to override the values that is already associated 168 00:11:51,000 --> 00:11:52,000 with a specific key. 169 00:11:52,000 --> 00:11:59,000 So new value will be put into the map only in case there is no entry with such key or keys associated 170 00:11:59,000 --> 00:11:59,000 with no value. 171 00:12:00,000 --> 00:12:05,000 The removal method can help you to remove entry by specifying the key value pair here. 172 00:12:05,000 --> 00:12:06,000 Also replace MassArt. 173 00:12:07,000 --> 00:12:12,000 They are different from Puth method because you can say that you want to replace Element only with a 174 00:12:12,000 --> 00:12:19,000 specific key and with a specific value, or in case of overall that method only in case such key exists. 175 00:12:20,000 --> 00:12:24,000 Comparative absence method allows you to compute value in case he is absent. 176 00:12:24,000 --> 00:12:30,000 We can pass the keys that doesn't exist in map and function that can compute new value. 177 00:12:30,000 --> 00:12:34,000 In case such care exists, the value won't be updated. 178 00:12:34,000 --> 00:12:41,000 Compute if present method takes key and functions that can compute the value based on the current key 179 00:12:41,000 --> 00:12:47,000 and previous value that is associated with it in case he exists and previous value is not. 180 00:12:47,000 --> 00:12:53,000 Now, the result of the function will be associated with this key compute method. 181 00:12:53,000 --> 00:12:59,000 Attempts to compute and mapping for the specified key and its current mapped value is there is no current 182 00:12:59,000 --> 00:12:59,000 mapping. 183 00:13:00,000 --> 00:13:02,000 Mersch method works in the following way. 184 00:13:03,000 --> 00:13:08,000 It is a specified key, is not already associated with a value or is associated with. 185 00:13:08,000 --> 00:13:11,000 Now associate it with the given no new value. 186 00:13:12,000 --> 00:13:19,000 Otherwise replace the associated value with the results of the given remapping function or removes if 187 00:13:19,000 --> 00:13:21,000 the result is now lost for assets. 188 00:13:21,000 --> 00:13:24,000 Require knowledge of functional programming in Java. 189 00:13:24,000 --> 00:13:29,000 That's why they will be reviewed in detail separately in the lessons about functional programming. 190 00:13:30,000 --> 00:13:37,000 Right now it is enough high level understanding what this message do, and now we are done with all 191 00:13:37,000 --> 00:13:42,000 default methods in my interface and it is time to review static methods in this interface. 192 00:13:43,000 --> 00:13:49,000 Here we see overloaded static method with the name of this method, say here since Java version nine 193 00:13:49,000 --> 00:13:51,000 and they can create immutable. 194 00:13:51,000 --> 00:13:56,000 That also means unverifiable map that contains a limited number of mappings. 195 00:13:57,000 --> 00:14:02,000 And you can see that the only difference between all of these methods is a number of mappings that it 196 00:14:02,000 --> 00:14:04,000 takes as a parameter. 197 00:14:05,000 --> 00:14:10,000 Here's a method that takes variable lengths, argument of type entry, and based on these creates and 198 00:14:10,000 --> 00:14:18,000 modifiable map and remasters returns and modifiable entry type based on the key value pair that is passed 199 00:14:18,000 --> 00:14:20,000 to the method, why this method is needed. 200 00:14:20,000 --> 00:14:26,000 This method is needed, for example, for the previous method that we have just discussed, because 201 00:14:26,000 --> 00:14:31,000 you want to eliminate the case when your entries changed because somebody got access to it by reference. 202 00:14:32,000 --> 00:14:35,000 That's why you might want to create an modifiable entry first. 203 00:14:35,000 --> 00:14:37,000 And this method will help you in that. 204 00:14:38,000 --> 00:14:41,000 And the last but not least method for today is copy of. 205 00:14:42,000 --> 00:14:48,000 If we want to create the copy of the map that nobody will be able to modify, we have to call this method 206 00:14:48,000 --> 00:14:52,000 and parse the map that we want to copy as an argument to this method. 207 00:14:53,000 --> 00:14:55,000 That's all method for map interface. 208 00:14:55,000 --> 00:15:00,000 I believe that right now, you know, map interface even better than some senior software engineers. 209 00:15:01,000 --> 00:15:03,000 Let's recap what we have learned today. 210 00:15:03,000 --> 00:15:05,000 Today, we learned Map Iraqi. 211 00:15:05,000 --> 00:15:10,000 We talked about features that are introduced in the implementations of map interface. 212 00:15:11,000 --> 00:15:14,000 We also talked about source, map and navigable map. 213 00:15:14,000 --> 00:15:16,000 We discussed what dictionary is. 214 00:15:17,000 --> 00:15:21,000 Now, you know what the difference is between Hash Table and Hashmat. 215 00:15:21,000 --> 00:15:24,000 After that, we learned methods of map interface. 216 00:15:25,000 --> 00:15:27,000 We also learned what entry type is. 217 00:15:28,000 --> 00:15:29,000 That's all what we have for today. 218 00:15:30,000 --> 00:15:31,000 Thanks a lot for your attention. 219 00:15:31,000 --> 00:15:33,000 See you in the next lesson.