பெரும்பாலான மக்களுக்கு, "வரிசை" என்ற வார்த்தை மிகவும் சில இனிமையான சங்கங்களை நினைவுபடுத்துகிறது. ஆனால் இன்று நாம் வெவ்வேறு வரிசைகளைப் பற்றி பேசுகிறோம் - ஜாவா வரிசைகள். ஜாவாவில், வரிசை என்பது வரிசை இடைமுகத்தைப் பெறுகிறது, இது சேகரிப்பு இடைமுகத்தை நீட்டிக்கிறது . அதாவது வரிசைகளை வசூல் போல் கருதலாம்.
ஜாவாவில் உள்ள வரிசைகள் இரண்டு இயக்கக் கொள்கைகளை ஆதரிக்கின்றன: FIFO மற்றும் LIFO .
FIFO (First In, First Out) கொள்கையானது வழக்கமான வரிசையை நிர்வகிக்கிறது - வரிசையில் சேர்க்கப்படும் முதல் உறுப்பு அதை விட்டு வெளியேறும் .
LIFO (லாஸ்ட் இன், ஃபர்ஸ்ட் அவுட்) கொள்கை ஒரு அடுக்கின் நடத்தையை விவரிக்கிறது - வரிசையில் கடைசியாக சேர்க்கப்பட்ட உறுப்பு முதலில் அதை விட்டு வெளியேறும் . எடுத்துக்காட்டாக, அட்டைகளின் அட்டையுடன் நீங்கள் இப்படித்தான் வேலை செய்கிறீர்கள்: நீங்கள் டெக்கின் அடிப்பகுதியை அடையும் வரையில் ஒரு நேரத்தில் மேலே உள்ள அட்டைகளை எடுத்துவிடுவீர்கள்.
ஜாவாவில் வரிசை படிநிலை இது போல் தெரிகிறது :
வரிசையில் 3 செயல்படுத்தல் வகுப்புகள் இருப்பதை இங்கே காணலாம் : LinkedList , ArrayDeque மற்றும் PriorityQueue . LinkedList மற்றும் ArrayDeque நேரடியாக வரிசையை அல்ல , ஆனால் Deque ஐ பெறுகின்றன .
Deque என்பது ஜாவா 6 இல் சேர்க்கப்பட்ட ஒரு இடைமுகம். இது வரிசைகளுக்குப் பயன்படும் பல முறைகளை உள்ளடக்கியது மற்றும் ஒரு வரிசையை இரட்டை முனை (அல்லது இருதரப்பு) வரிசையாகச் செயல்பட அனுமதிக்கிறது. அதாவது FIFOமற்றும்LIFOஆக இருக்கலாம்.
Deque இடைமுகத்தின் இரண்டு வழித்தோன்றல்களில் ஒன்று ArrayDeque ஆகும் . இரு முனைகளிலும் உள்ள உறுப்புகளைச் செருகவும் அகற்றவும் உதவும் இரட்டை முனை வரிசையை இது ஆதரிக்கிறது. இது தானாக அளவு வளரும் ஒரு மாறும் வரிசையாகும்.
வரிசையின் நேரடி வழித்தோன்றலான முன்னுரிமை வரிசை வகுப்பும் உள்ளது : இது Deque ஐ செயல்படுத்தும் வகுப்புகளை விட வித்தியாசமாக செயல்படுகிறது .
PriorityQueue என்பது ஒரு முன்னுரிமை வரிசையாகும், இது முன்னிருப்பாக அவற்றின் இயல்பான வரிசைப்படி உறுப்புகளை ஒழுங்கமைக்கிறது. இங்கே வரிசையாக்கம் ஒப்பிடக்கூடிய மற்றும் ஒப்பீட்டு இடைமுகங்களைப் பயன்படுத்துகிறது. ட்ரீசெட் அல்லது ட்ரீமேப் போன்ற கொள்கையே உள்ளது - ஒப்பிடக்கூடிய இடைமுகத்தைப் பயன்படுத்தும் வகுப்புகள்மற்றும் அவற்றின் சொந்த வரிசையைக் கொண்டிருக்கும்.
PriorityQueue<String> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(String::length));
priorityQueue.add("Andrew");
priorityQueue.add("John");
priorityQueue.add("Rob");
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.remove());
}
இந்த எடுத்துக்காட்டை இயக்கினால், கன்சோலில் நீங்கள் பார்ப்பது இங்கே:
ஜான்
ஆண்ட்ரூ
நாங்கள் வரிசைகளுடன் பணிபுரிகிறோம் மற்றும் வழக்கமான சேகரிப்புகள் அல்ல என்பதால், பட்டியலிலிருந்து உறுப்புகளை அகற்ற வேண்டும். இதைச் செய்ய, இந்த கட்டமைப்பைப் பயன்படுத்துகிறோம்:
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.remove());
}
Deque இடைமுகம் வரிசை முறைகளைப் பெறுகிறது மற்றும் அதன் சொந்த பல சுவாரஸ்யமான முறைகளைச் சேர்க்கிறது :
void addFirst(E obj) | வரிசையின் முன்புறத்தில் obj உறுப்பைச் சேர்க்கிறது |
வெற்றிடமான addLast(E obj) | வரிசையின் முடிவில் obj உறுப்பைச் சேர்க்கிறது |
E getFirst() | வரிசையில் இருந்து முதல் உறுப்பு திரும்பும் |
E getLast() | வரிசையில் இருந்து கடைசி உறுப்பு திரும்பும் |
பூலியன் ஆஃபர் ஃபர்ஸ்ட் (இ ஒப்ஜே) | வரிசையின் முன்புறத்தில் obj உறுப்பைச் சேர்க்கிறது , மேலும் உறுப்பு சேர்க்கப்பட்டால் உண்மை என்பதை வழங்கும். இல்லையெனில், தவறானது . |
பூலியன் சலுகை கடைசி(E obj) | வரிசையின் முடிவில் obj உறுப்பைச் சேர்க்கிறது , மேலும் உறுப்பு சேர்க்கப்பட்டால் உண்மை என்பதை வழங்கும். இல்லையெனில், தவறானது . |
இ ரோர்() | வரிசையில் இருந்து முதல் உறுப்பைப் பெற்று அதை அகற்றும் |
வெற்றிட புஷ் (E obj) | வரிசையின் முன்புறத்தில் obj உறுப்பைச் சேர்க்கிறது |
E peekFirst() | வரிசையில் இருந்து முதல் உறுப்பு திரும்பும் (ஆனால் அகற்றப்படாது). |
E peekLast() | வரிசையில் இருந்து கடைசி உறுப்பு திரும்பும் (ஆனால் அகற்றப்படாது). |
இ வாக்கெடுப்பு முதல்() | வரிசையில் இருந்து முதல் உறுப்பைத் திருப்பி நீக்குகிறது. உறுப்புகள் இல்லாவிட்டால் பூஜ்யமாகத் திரும்பும் . |
இ வாக்கெடுப்பு கடைசி() | வரிசையிலிருந்து கடைசி உறுப்பைத் திருப்பி நீக்குகிறது. உறுப்புகள் இல்லாவிட்டால் பூஜ்யமாகத் திரும்பும் . |
இ நீக்க கடைசி() | வரிசையின் முதல் உறுப்பைத் திருப்பி நீக்குகிறது. எந்த உறுப்புகளும் இல்லை என்றால் விதிவிலக்கை வீசுகிறது. |
E removeFirst() | வரிசையின் கடைசி உறுப்பைத் திருப்பி நீக்குகிறது. எந்த உறுப்புகளும் இல்லை என்றால் விதிவிலக்கை வீசுகிறது. |
பூலியன் நீக்கம் முதல் நிகழ்வு (பொருள் பொருள்) | வரிசையில் இருந்து obj இன் முதல் நிகழ்வை நீக்குகிறது |
பூலியன் நீக்க கடைசி நிகழ்வு (பொருள் பொருள்) | வரிசையில் இருந்து obj இன் கடைசி நிகழ்வை நீக்குகிறது |
நடைமுறையில் உள்ள இந்த முறைகளில் சிலவற்றை இப்போது பார்க்கலாம்.
முதலில், வரிசையில் ஒரு உறுப்பைச் சேர்ப்போம்:
Deque<String> deque = new ArrayDeque<>();
deque.add("Apple"); // Adds "Apple" to the end of the queue
deque.addFirst("Orange"); // Adds "Orange" to the front of the queue
deque.addLast("Pineapple"); // Adds "Pineapple" to the end of the queue
System.out.println(deque);
இப்போது வரிசையில் இருந்து மதிப்புகளைப் பெறுவோம்:
Deque<String> deque = new ArrayDeque<>();
deque.add("Apple");
deque.addFirst("Orange");
deque.addLast("Pineapple");
System.out.println("The first element is: "+ deque.getFirst());
System.out.println("The last element is: " + deque.getLast());
}
இந்த குறியீடு வரிசையின் முதல் மற்றும் கடைசி உறுப்பைக் காட்டுகிறது.
கடைசி உறுப்பு: அன்னாசி
Deque<String> deque = new ArrayDeque<>();
deque.add("Apple");
deque.addFirst("Orange");
deque.addLast("Pineapple");
deque.add("Lemon");
System.out.println(deque.pop()); // Get and remove the first element of the queue
System.out.println(deque.poll()); // Get and remove the first element of the queue
System.out.println(deque);
இந்த குறியீட்டை இயக்கினால், நாம் பெறுகிறோம்:
ஆப்பிள்
[அன்னாசி, எலுமிச்சை]
பாப்() மற்றும் கருத்துக் கணிப்பு() ஆகியவற்றுக்கு இடையேயான வித்தியாசம் என்னவென்றால், பட்டியல் காலியாக இருந்தால், பாப்() ஒரு NoSuchElementException ஐ வீசும் , ஆனால் கருத்துக் கணிப்பு() பூஜ்யத்தை வழங்கும் .
இப்போது நாம் pollFirst() மற்றும் pollLast() முறைகளைக் கருத்தில் கொள்வோம்.
Deque<String> deque = new ArrayDeque<>();
deque.add("Apple");
deque.addFirst("Orange");
deque.addLast("Pineapple");
deque.add("Lemon");
System.out.println(deque.pollFirst()); // Get and remove the first element of the queue
System.out.println(deque.pollLast()); // Get and remove the last element of the queue.
System.out.println(deque);
எலுமிச்சை
[ஆப்பிள், பைன்ஆப்பிள்]
இரண்டு முறைகளும் வரிசையில் இருந்து ஒரு மதிப்பை திரும்பவும் அகற்றவும்.
இங்கே peekFirst() மற்றும் peekLast() முறைகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு:
Deque<String> friends = new ArrayDeque<>();
friends.add("John");
friends.add("Rob");
friends.add("Greg");
friends.add("Max");
friends.add("Oliver");
System.out.println("The first element is: " + friends.peekFirst());
System.out.println("The last element is: " + friends.peekLast());
System.out.println(friends);
கடைசி உறுப்பு: ஆலிவர்
[ஜான், ராப், கிரெக், மேக்ஸ், ஆலிவர்]
இரண்டு முறைகளும் வரிசையில் இருந்து முதல்/கடைசி உறுப்பைத் திருப்பி, அவற்றை அகற்ற வேண்டாம். வரிசை காலியாக இருந்தால், பூஜ்யம் திரும்பப் பெறப்படும்.
சபாஷ்! ஜாவாவில் வரிசைகளுடன் எவ்வாறு வேலை செய்வது என்பதை இன்று கற்றுக்கொண்டோம். நடைமுறையில் அவற்றை எவ்வாறு பயன்படுத்துவது என்பது இப்போது உங்களுக்குத் தெரியும்.