1 00:00:06,000 --> 00:00:06,000 Hello, Jim. 2 00:00:06,000 --> 00:00:10,000 Today, we are going to lunch with you and other collections of Iraq. 3 00:00:10,000 --> 00:00:15,000 Today we'll talk about you interface and one more important interface that extends you, that is that 4 00:00:15,000 --> 00:00:19,000 interface with the masses in interface. 5 00:00:19,000 --> 00:00:24,000 And I hope you didn't skip lessons because in previous lessons during the General Overy, we already 6 00:00:24,000 --> 00:00:28,000 talked about you and discussed Masset that this interface has. 7 00:00:29,000 --> 00:00:31,000 But today we'll dive into the details. 8 00:00:31,000 --> 00:00:34,000 After that, we'll learn methods in that interface. 9 00:00:34,000 --> 00:00:38,000 Today, we're going to learn what is the difference between these two interfaces. 10 00:00:39,000 --> 00:00:44,000 Also, we'll learn what FTF old principle is and what LIFO principle is. 11 00:00:45,000 --> 00:00:51,000 After we learn interfaces, we'll take a look at the most popular Q and deck implementations. 12 00:00:51,000 --> 00:00:54,000 And I will share with you practical tips and practical cases. 13 00:00:55,000 --> 00:01:00,000 And at the end of the lesson, we are going to review your home task and I will explain how you can 14 00:01:00,000 --> 00:01:01,000 practice your skills. 15 00:01:01,000 --> 00:01:07,000 Let's start and to understand what CU is, we have to understand what FTF old principle is. 16 00:01:08,000 --> 00:01:16,000 If you don't skip lessons, then you remember that FCF also is a method of organizing of a data structure 17 00:01:16,000 --> 00:01:22,000 where the first elements that enter the queue, the first leifs is a Q, in other words, the head of 18 00:01:22,000 --> 00:01:30,000 the queue always processed first f i f o stands for first in first out here on the slide you may see 19 00:01:30,000 --> 00:01:34,000 brutalisation of the Q the Q has the head and the tail. 20 00:01:35,000 --> 00:01:41,000 Students usually wondered where the heart of the Q is and where style of the Q by convention. 21 00:01:41,000 --> 00:01:49,000 The end of the queue at which elements are added is called the tail back Oriya of the Q The end at which 22 00:01:49,000 --> 00:01:53,000 elements are removed is called the hat or front of the Q. 23 00:01:53,000 --> 00:01:58,000 Analogously two words used when people line up to wait for goods or services. 24 00:01:58,000 --> 00:02:00,000 Does it make sense now? 25 00:02:00,000 --> 00:02:03,000 If yes, then let's answer our next question. 26 00:02:03,000 --> 00:02:05,000 Where Q is used. 27 00:02:05,000 --> 00:02:07,000 Imagine that you have two services. 28 00:02:07,000 --> 00:02:11,000 The first service is in charge of onboarding of new customer. 29 00:02:11,000 --> 00:02:18,000 This service process information about the user verifies his payment method at him to the theorem, 30 00:02:18,000 --> 00:02:24,000 checks whether this user already registered, etc. Let's call it onboarding service. 31 00:02:24,000 --> 00:02:30,000 And another service is in charge of handling all payments from the user for his subscription on a monthly 32 00:02:30,000 --> 00:02:30,000 basis. 33 00:02:31,000 --> 00:02:33,000 Let's call this payment service. 34 00:02:33,000 --> 00:02:39,000 Those are two independent services because the first one is in charge of selling subscriptions to customer 35 00:02:39,000 --> 00:02:41,000 only on one side. 36 00:02:41,000 --> 00:02:47,000 But they are different of the similar marketing sites that promotes different products and services 37 00:02:47,000 --> 00:02:47,000 of the company. 38 00:02:48,000 --> 00:02:54,000 Our onboarding service is one out of many services, but the service that is responsible for charging 39 00:02:54,000 --> 00:03:00,000 clients on a monthly basis is used by all websites and systems within the same company. 40 00:03:01,000 --> 00:03:06,000 This is real life scenarios that my team implemented in simplified form also. 41 00:03:06,000 --> 00:03:08,000 But still, I believe you got my point. 42 00:03:08,000 --> 00:03:14,000 And before process payment information from any of the website, the queue exists. 43 00:03:14,000 --> 00:03:21,000 It exists right in the middle between all services and charge and service and all services, including 44 00:03:21,000 --> 00:03:25,000 our onboarding service submits the message in the queue. 45 00:03:25,000 --> 00:03:33,000 The message contains payment profile of our customer and product details and our payment service process. 46 00:03:33,000 --> 00:03:39,000 All these messages one by one and implements all necessary logic related for recurring payments. 47 00:03:40,000 --> 00:03:41,000 Does it make more sense now? 48 00:03:42,000 --> 00:03:43,000 Can you understand now? 49 00:03:43,000 --> 00:03:45,000 Why do we need Kyuss hope? 50 00:03:45,000 --> 00:03:49,000 This brings more clarity and you understand why we need to use Qs. 51 00:03:50,000 --> 00:03:57,000 OK, if you understood cuz let's understand what a deck is and to understand that we have to understand 52 00:03:57,000 --> 00:03:59,000 what LIFO principle is. 53 00:04:00,000 --> 00:04:06,000 LIFO is a method of organizing the manipulation of a data, whereas the last element that entered the 54 00:04:06,000 --> 00:04:09,000 container should be processed first. 55 00:04:09,000 --> 00:04:12,000 LIFO stands for Last In, First Out. 56 00:04:13,000 --> 00:04:19,000 If you remember stack class that extends vector, that is also implementation of LIFO principle. 57 00:04:20,000 --> 00:04:23,000 And on the screen you can see visualisation of stack. 58 00:04:23,000 --> 00:04:30,000 But where we might want to apply LIFO principle, the easiest example of that usage, which you are 59 00:04:30,000 --> 00:04:32,000 faced with on a daily basis, is in the clips. 60 00:04:33,000 --> 00:04:36,000 Have you ever used and do operations in Eclipse? 61 00:04:36,000 --> 00:04:38,000 How do you think the operation works? 62 00:04:39,000 --> 00:04:45,000 Each batch of changes is put in the stack and then the case and those short cards is correct. 63 00:04:45,000 --> 00:04:48,000 The latest separation is removed from the stack. 64 00:04:48,000 --> 00:04:51,000 For example, you wrote Hello World. 65 00:04:51,000 --> 00:04:54,000 The World World is on top of your stack. 66 00:04:54,000 --> 00:04:58,000 When you want to run the operation, it leaves the stack first. 67 00:04:58,000 --> 00:05:00,000 Or imagine your browser history. 68 00:05:00,000 --> 00:05:02,000 You open new pages and then you need. 69 00:05:03,000 --> 00:05:10,000 The return on the previous page or asset allocation in your Java program, we can call one message from 70 00:05:10,000 --> 00:05:16,000 another one and after that call one more method how to track the flow of program execution only with 71 00:05:16,000 --> 00:05:23,000 the help of the stack data structure that stores elements according to LIFO method that it makes more 72 00:05:23,000 --> 00:05:23,000 sense. 73 00:05:23,000 --> 00:05:26,000 Now, can you understand now when do we need stack? 74 00:05:27,000 --> 00:05:27,000 Awesome. 75 00:05:28,000 --> 00:05:34,000 And now when you understood what CU and DEC is and why we need them, I suggest dive deeper into the 76 00:05:34,000 --> 00:05:36,000 details and learn interfaces. 77 00:05:36,000 --> 00:05:40,000 Here is a new interface we have at and of a message here. 78 00:05:41,000 --> 00:05:43,000 Both exist to add elements to the queue. 79 00:05:44,000 --> 00:05:47,000 Both returns through in case element was added to the queue. 80 00:05:48,000 --> 00:05:52,000 Then why do we need two similar methods and why do we need add method here? 81 00:05:52,000 --> 00:05:54,000 If it is present in collection interface? 82 00:05:55,000 --> 00:06:01,000 Let's understand the difference at that is present in queue interface to highlight the specific behavior 83 00:06:01,000 --> 00:06:06,000 of that method in queue type add method adds elements to the queue. 84 00:06:06,000 --> 00:06:12,000 But as you can see from the documentation here in legal state, exceptions will be thrown in case element 85 00:06:12,000 --> 00:06:15,000 couldn't be added because of the capacity restrictions. 86 00:06:16,000 --> 00:06:21,000 To be honest, in most of the cases you wouldn't see this error while working with the implementation 87 00:06:21,000 --> 00:06:23,000 of the queue interface. 88 00:06:23,000 --> 00:06:23,000 Why? 89 00:06:24,000 --> 00:06:29,000 Because most of the implementations have no restrictions on capacity and their unbounded. 90 00:06:30,000 --> 00:06:34,000 And in this case there is no difference between at and of. 91 00:06:34,000 --> 00:06:41,000 A method of a method doesn't throw exception in case element is not added because of the capacity restrictions. 92 00:06:41,000 --> 00:06:44,000 It also can return false hope. 93 00:06:44,000 --> 00:06:49,000 This knowledge will help you during the interview, in case you will be asked what the difference is 94 00:06:49,000 --> 00:06:52,000 between add and offer method in queue interface. 95 00:06:52,000 --> 00:06:53,000 Let's move on. 96 00:06:53,000 --> 00:06:58,000 We have two methods to retrieve elements from the heart of the queue and remove it from the queue. 97 00:06:59,000 --> 00:07:01,000 Zaya, remove and pull. 98 00:07:01,000 --> 00:07:06,000 The only difference between them is the way how they behave in case there are no more elements in the 99 00:07:06,000 --> 00:07:07,000 queue. 100 00:07:07,000 --> 00:07:13,000 Remove Masset in this case will throw no such element exception and Paul MassArt will just returns. 101 00:07:13,000 --> 00:07:16,000 And now what do you see in real life? 102 00:07:16,000 --> 00:07:19,000 I would say evaluate the logic of execution of your program. 103 00:07:19,000 --> 00:07:26,000 First, in case you would ask me what method I would use, I would use full method and would just perform 104 00:07:26,000 --> 00:07:26,000 null check. 105 00:07:27,000 --> 00:07:31,000 I just afraid of all exceptions and I would rather opt for options. 106 00:07:31,000 --> 00:07:37,000 That doesn't throw an exception, but all cases and programming styles are different and I can accept 107 00:07:37,000 --> 00:07:38,000 that. 108 00:07:38,000 --> 00:07:40,000 And that's why it's up to you. 109 00:07:40,000 --> 00:07:44,000 Which method to choose is a similar situation with the next two methods. 110 00:07:45,000 --> 00:07:50,000 We have two methods that allows us to get the elements from the head of the queue, but that don't remove 111 00:07:50,000 --> 00:07:54,000 element from the queue zaya element and pick. 112 00:07:55,000 --> 00:07:58,000 The only difference is that element Masad Maestro. 113 00:07:58,000 --> 00:08:03,000 No such element exception in case there is no more aliments and big method would just return. 114 00:08:03,000 --> 00:08:06,000 Now you already know what I would choose. 115 00:08:06,000 --> 00:08:09,000 That's all methods that are declared in queue interface. 116 00:08:09,000 --> 00:08:14,000 Let's move further and let's investigate what message do we have in that interface. 117 00:08:14,000 --> 00:08:22,000 So as we already discussed, that extends queue interface and organizes data according to LIFG principle. 118 00:08:23,000 --> 00:08:28,000 Let's review methods now that are present here in the top of our list. 119 00:08:28,000 --> 00:08:34,000 We can find a lot of similar methods that can work with the head and with the tail of the queue at first 120 00:08:34,000 --> 00:08:37,000 and at last of a first and of last. 121 00:08:38,000 --> 00:08:44,000 Remove first and remove last, both first and last week first and pick last. 122 00:08:44,000 --> 00:08:46,000 I believe it is clear how they work. 123 00:08:46,000 --> 00:08:52,000 Since we discussed similar methods in queue interface, I noticed that there is no element first and 124 00:08:52,000 --> 00:08:57,000 element last method if to follow the analogy in is naming. 125 00:08:57,000 --> 00:09:03,000 But do we have methods that doesn't remove element from the queue and throws an exception in case there 126 00:09:03,000 --> 00:09:03,000 is no element? 127 00:09:04,000 --> 00:09:08,000 Yes, we have aget first and last method here. 128 00:09:08,000 --> 00:09:14,000 They here also to interest in masses, remove first Securus and remove last appearance. 129 00:09:14,000 --> 00:09:20,000 When we are referring to the first occurrence, we mean first in case we would reverse elements from 130 00:09:20,000 --> 00:09:21,000 the had the tail. 131 00:09:21,000 --> 00:09:27,000 So the first Securus will be closer to the heart of the queue and the last appearance is closer to the 132 00:09:27,000 --> 00:09:28,000 tail of the queue. 133 00:09:29,000 --> 00:09:36,000 After that abasic message from the queue go here and en masse, it adds all elements to the container, 134 00:09:36,000 --> 00:09:39,000 the same as it is declared in connection interface. 135 00:09:39,000 --> 00:09:45,000 There is only one clarification that all elements will be inserted into the end of the queue. 136 00:09:45,000 --> 00:09:47,000 And here are static methods. 137 00:09:47,000 --> 00:09:53,000 We already discussed what the stack is and here's a mass to manage stack push. 138 00:09:53,000 --> 00:09:55,000 It adds element in the heart of the queue. 139 00:09:55,000 --> 00:09:58,000 This method will throw illegal state exception in the case. 140 00:09:58,000 --> 00:10:02,000 Element can't be added due to capacity restrictions. 141 00:10:02,000 --> 00:10:05,000 This method is similar to at first method. 142 00:10:05,000 --> 00:10:08,000 This is even specified in general documentation. 143 00:10:08,000 --> 00:10:10,000 Then why do we need it at all? 144 00:10:11,000 --> 00:10:16,000 For compatibility reasons with legacy class stack, the push and pop methods exist. 145 00:10:16,000 --> 00:10:21,000 This means that they're only to make a transition of all code easier for programa. 146 00:10:22,000 --> 00:10:26,000 The pop method is here and it is equivalent of remove first MassArt. 147 00:10:27,000 --> 00:10:32,000 And I believe you already understood why Oracle left this method in this interface. 148 00:10:32,000 --> 00:10:36,000 The last message that we didn't talk about is the sending iterator. 149 00:10:37,000 --> 00:10:42,000 This message, according to the interface, should return iterator objects that can iterate over the 150 00:10:42,000 --> 00:10:44,000 elements in reverse sequential order. 151 00:10:45,000 --> 00:10:50,000 That is from the last element from our tail to the first element to our hat. 152 00:10:51,000 --> 00:10:54,000 That's all matters that we have in our back interface. 153 00:10:54,000 --> 00:10:58,000 Now let's investigate the most popular Q and deck implementations. 154 00:10:59,000 --> 00:11:05,000 On this slide, you can see the most popular implementations of Q and back interfaces, I recommend 155 00:11:05,000 --> 00:11:08,000 you post the video and read the slide attentively. 156 00:11:09,000 --> 00:11:13,000 I believe there is no need to investigate each of these class in details. 157 00:11:13,000 --> 00:11:19,000 It is better to put our focus on the most popular implementations, the most popular implementation, 158 00:11:19,000 --> 00:11:26,000 in my opinion, and based on the official Oracle tutorials can be split in two major categories implementations 159 00:11:26,000 --> 00:11:30,000 of the interface and implementations of just rescue interface. 160 00:11:30,000 --> 00:11:36,000 In case you need the implementations, then most likely you will be happy with slinked list or array 161 00:11:36,000 --> 00:11:37,000 that class. 162 00:11:37,000 --> 00:11:43,000 If you need Q implementations, most likely you will opt for lenth list of priority queue if you need 163 00:11:43,000 --> 00:11:45,000 thread safe implementations of the queue. 164 00:11:45,000 --> 00:11:50,000 I would like to draw attention to avoid blocking Q and priority blocking queue. 165 00:11:50,000 --> 00:11:55,000 If you need thread safe implementations of DEC, then your choice is linked lock and DEC. 166 00:11:56,000 --> 00:11:58,000 As you can see there is really a lot of options. 167 00:11:59,000 --> 00:12:06,000 But in my opinion and based on my experience in 95 percent of cases when you would need to use DEC implementation 168 00:12:06,000 --> 00:12:12,000 to implement some stack or in case you would need Q you would use in case class the rest five percent 169 00:12:12,000 --> 00:12:17,000 of cases is for thread safe implementation of the Q and DEC and also priority. 170 00:12:17,000 --> 00:12:25,000 Q taking into account we already had lesson about Lindley's and we already learned the Q and DEC interfaces. 171 00:12:25,000 --> 00:12:29,000 There will be nothing hard for you just to call these methods on linked list. 172 00:12:29,000 --> 00:12:34,000 And that is why, for the sake of the demo, I would like to show you how AQ works on the example of 173 00:12:34,000 --> 00:12:35,000 priority. 174 00:12:35,000 --> 00:12:38,000 Q So here I prepared them file. 175 00:12:38,000 --> 00:12:43,000 I will leave link to this file in attachments to the lesson so that you could copy and run this file 176 00:12:43,000 --> 00:12:44,000 on your local computer. 177 00:12:45,000 --> 00:12:47,000 Here I declare it variable of type. 178 00:12:47,000 --> 00:12:51,000 Q Parametrized with the integer type here I created object of. 179 00:12:52,000 --> 00:12:57,000 Q And in these lines you can see that I added to the Q five elements. 180 00:12:57,000 --> 00:13:00,000 They are two eight three one then. 181 00:13:01,000 --> 00:13:05,000 So in the case I'd like to take the first element in the Q what it would be. 182 00:13:06,000 --> 00:13:10,000 Take your time to think about this question because this is a trick question. 183 00:13:11,000 --> 00:13:17,000 We all know how Q works and what is a five for principle, but priority Q has interesting feature. 184 00:13:18,000 --> 00:13:22,000 It automatically source elements according to the natural order. 185 00:13:22,000 --> 00:13:26,000 I hope you didn't skip the lesson about comparator uncomparable. 186 00:13:26,000 --> 00:13:32,000 And you know that natural order is an order that is described in the compared to method because of implementation 187 00:13:32,000 --> 00:13:33,000 of comparable interface. 188 00:13:34,000 --> 00:13:40,000 And that's where a provocative word comes from in the name of the Q it prioritize elements. 189 00:13:40,000 --> 00:13:46,000 So in case I would prefer to control the elements from the head of the Q this would be one even despite 190 00:13:46,000 --> 00:13:50,000 integer object was well your one wasn't inserted the first. 191 00:13:51,000 --> 00:13:53,000 Let me run the program to show you this. 192 00:13:53,000 --> 00:13:57,000 I used polymathic to get elements from the Q and remove it. 193 00:13:57,000 --> 00:14:04,000 So the size of the Q right now is four now in case I call Big Masset and get the hell out of the Q, 194 00:14:04,000 --> 00:14:07,000 but don't remove element here. 195 00:14:07,000 --> 00:14:11,000 You can see in console output that our next object and our priority. 196 00:14:11,000 --> 00:14:13,000 Q is to and the size of the peak. 197 00:14:14,000 --> 00:14:21,000 It is still four because I didn't remove elements from the Q Pay attention to the fact that all elements 198 00:14:21,000 --> 00:14:22,000 that you put into the priority. 199 00:14:22,000 --> 00:14:28,000 Q should implement comparable interface because in case type doesn't implement comparable interface, 200 00:14:28,000 --> 00:14:35,000 Breuer's UCU object would throw exception, glossiest exception that would say that your type cannot 201 00:14:35,000 --> 00:14:37,000 be cast to comparable type. 202 00:14:37,000 --> 00:14:39,000 Let me show you an example. 203 00:14:39,000 --> 00:14:46,000 Let me comment these lines of code here, you can see that I create Q Parametrized by product type. 204 00:14:46,000 --> 00:14:53,000 Just to remind you, product is our custom type that we created during our work on online store implementation. 205 00:14:53,000 --> 00:14:56,000 After that, I want to place my product into this. 206 00:14:56,000 --> 00:15:04,000 Q Let me run the program to show you what would happen and here you can see glass cast exception. 207 00:15:04,000 --> 00:15:05,000 What to do now? 208 00:15:06,000 --> 00:15:07,000 We have two options here. 209 00:15:08,000 --> 00:15:13,000 The first one is to use only types that implement comparable interface. 210 00:15:13,000 --> 00:15:16,000 The second option is to set our priority. 211 00:15:16,000 --> 00:15:18,000 Q How to compare elements. 212 00:15:18,000 --> 00:15:23,000 Let me comment these lines of code to show you the next example here. 213 00:15:23,000 --> 00:15:29,000 You can see that I created the same Q Parametrized by product type, but I pass the product comparison 214 00:15:29,000 --> 00:15:31,000 to the constructor of prosecute. 215 00:15:32,000 --> 00:15:40,000 Now my project knows how to compare products and saw them let me run the program and we can't see error 216 00:15:40,000 --> 00:15:40,000 anymore. 217 00:15:41,000 --> 00:15:47,000 That is because our Q knows how to prioritize products, where to use priority. 218 00:15:47,000 --> 00:15:51,000 Q Imagine that you want to implement helpdesk during the day. 219 00:15:51,000 --> 00:15:57,000 You receive tons of requests and complaints, but you have limited number of operators in your company 220 00:15:57,000 --> 00:15:58,000 that can. 221 00:15:58,000 --> 00:16:05,000 These requests and you have special app for your operators where each operator can click a button, 222 00:16:05,000 --> 00:16:12,000 they can request and move it in progress, and it is obvious that most critical requests should be processed 223 00:16:12,000 --> 00:16:18,000 first in case a customer can't make a payment in the online store or customer already paid. 224 00:16:18,000 --> 00:16:23,000 But some error happened and he or she can't get details of his order. 225 00:16:23,000 --> 00:16:29,000 That is more critical than some random question, like one sorting by manufacturer will be implemented 226 00:16:29,000 --> 00:16:30,000 on your site. 227 00:16:30,000 --> 00:16:37,000 They agree with me and what you have to do probably on the front end, you would implement some dropdown 228 00:16:37,000 --> 00:16:40,000 where you would ask your customer to categorize request. 229 00:16:41,000 --> 00:16:47,000 For example, here on the slide you can see example of support of Panya in your system. 230 00:16:47,000 --> 00:16:50,000 You have some object, something like support ticket type. 231 00:16:50,000 --> 00:16:54,000 You also have to implement logic that would assign support ticket type. 232 00:16:54,000 --> 00:17:00,000 And based on the type of the request, you would assign priority, high, medium or low. 233 00:17:00,000 --> 00:17:04,000 And after that you would pull your support ticket object into the queue. 234 00:17:05,000 --> 00:17:11,000 And you already know that we have to either implement compatible interface in our support ticket or 235 00:17:11,000 --> 00:17:14,000 we have to create a competitor and pass it to priority queue. 236 00:17:14,000 --> 00:17:15,000 Interesting. 237 00:17:15,000 --> 00:17:17,000 I hope it is. 238 00:17:17,000 --> 00:17:23,000 And moreover, implementing something like this already a real life task for our software engineer. 239 00:17:23,000 --> 00:17:25,000 This will be your homework. 240 00:17:25,000 --> 00:17:30,000 But before I would share with you the details of your homework, let's recap what we have learned today. 241 00:17:31,000 --> 00:17:33,000 Today we learned Q and DEC interfaces. 242 00:17:34,000 --> 00:17:38,000 We learned in detail how matters that are described in these interfaces work. 243 00:17:39,000 --> 00:17:43,000 We learned what a FFO and LIFO data store methods are. 244 00:17:44,000 --> 00:17:49,000 We used you and DEC implementations and learned the most popular ones after that. 245 00:17:49,000 --> 00:17:56,000 On the real example, we learned how particular works and now I suggest reviewing your homework. 246 00:17:56,000 --> 00:18:02,000 You have to implement helpdesk facades that would serve as a main interface for a support engineer to 247 00:18:02,000 --> 00:18:09,000 interact with the system, helpdesk facade interface has only three masses that you support. 248 00:18:09,000 --> 00:18:16,000 You could get next support ticket and get a number of tickets according to our requirements, get next 249 00:18:16,000 --> 00:18:16,000 support ticket. 250 00:18:16,000 --> 00:18:20,000 Masset will be called when your support engineer would click on the button. 251 00:18:21,000 --> 00:18:24,000 This message should return top priority item. 252 00:18:24,000 --> 00:18:29,000 I almost explained to you how to implement Help Desk in the online store. 253 00:18:29,000 --> 00:18:35,000 Here you can find the details about what request type might be and priority for specific request type 254 00:18:36,000 --> 00:18:42,000 during the creation of the support ticket will specify only typos request and its priority is defined 255 00:18:42,000 --> 00:18:45,000 automatically based on the Moppin that are written down in the table. 256 00:18:46,000 --> 00:18:48,000 And there is one more requirement in the case. 257 00:18:48,000 --> 00:18:51,000 Support tickets have the same priority. 258 00:18:51,000 --> 00:18:54,000 The one that was created earlier should be processed first. 259 00:18:55,000 --> 00:18:57,000 I can give you a small hint here. 260 00:18:57,000 --> 00:18:58,000 You can implement counter. 261 00:18:59,000 --> 00:19:04,000 This even might be static field and you may consider the value of this field when you would compare 262 00:19:04,000 --> 00:19:06,000 to support tickets, for example. 263 00:19:06,000 --> 00:19:08,000 Does it make sense home? 264 00:19:08,000 --> 00:19:09,000 The task is clear for you. 265 00:19:10,000 --> 00:19:15,000 This is a really interesting task that will help you a lot in understanding of the cues and will give 266 00:19:15,000 --> 00:19:17,000 you some clues to real life experience. 267 00:19:18,000 --> 00:19:19,000 Thank you all for your attention. 268 00:19:19,000 --> 00:19:22,000 Have a great day and see you in the next lesson.