LinkedList একটি ডেটা স্ট্র্যাকচার যা অনেক গুলো ডেটা [বা collections of data] সংরক্ষন করার জন্য ব্যবহৃত হয়। LinkedList অনেক গুলো নড [node] এর সাহায্যে তৈরি হয়। প্রতিটি নডে একটি করে ডেটা থাকে এবং একটি করে লিঙ্ক থাকে, যাকে রেফারেন্স বলে। ঐ লিঙ্ক পরের ডেটার সাথে কানেক্টেড থাকে। এভাবে পরের নডে একটি ডেটা ও একটি লিঙ্ক থাকে। আর একটা ডেটার সাথে আরেকটা ডেটার এমন লিঙ্ক তৈরি করে যুক্ত থাকার জন্যই এর নাম LinkedList।
নিচের ছবিটি দেখুনঃ
সম্পুর্ন structure এর কোন পরিবর্তন না করেই LinkedList এ কোন ডেটা Insert বা Remove করা যায়। আর এ জন্যই LinkedList ব্যবহৃত হয়। যেমন আমরা যদি উপরের লিস্ট থেকে ৯৯ রিমুভ করতে চাই আমাদের শুধু মাত্র ১২ এর লিঙ্কটা ৩৭ এর সাথে লাগিয়ে দিলেই হবে। তাহলে ৯৯ যে যায়গাটি দখল করে আছে তা অটোমেটিক্যালি মুক্ত হয়ে যাবে।
ইচ্ছে করলে Array ব্যবহার করে LinkedList তৈরি/ইমপ্লিম্যান্টেশন করা যায়। LinkedList তৈরি করতে চাইলে এ টিউটোরিয়াল টা দেখতে পারেন।
জাভাতে LinkedList এর একটি ক্লাস আছে। আমরা তা ব্যবহার করেই LinkedList এর কাজ সেরে নিব।
আমরা একটি LinkedList তৈরি করতে পারি LinkedList list = new LinkedList(); এর সাহায্যে। তার জন্য আমাদেরকে java.util.LinkedList; ক্লাসটি import করে নিতে হবে। কোন ডেটা যোগ করার জন্য list.add(“Data”); দিলে ডেটা যোগ হয়ে যাবে LinkedList এর মধ্যে।
যেমনঃ
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); } }
উপরের প্রোগ্রামে আমরা list নামে একটা LinkedList তৈরি করে নিলাম। তারপর তার মধ্যে ৫টি ডেটা যোগ করলাম add(); মেথডের সাহায্যে। আমরা যেহেতু কোন কিছু প্রিন্ট বা আউটপুট দি নি তা প্রোগ্রামটি কিছুই দেখাবে ন। এখন শুধু System.out.println(list); সিনট্যাক্সটি যুক্ত করে দিন। তারপর দেখুন পুরো LinkedList টা আমাদের দেখাচ্ছে।
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); System.out.println(list); } }
প্রোগ্রামটির আউটপুটঃ
[Dhaka, Khulna, Kustia, Noakhali, Bogra]
আমরা ইচ্ছে করলে লিস্টে মধ্যে লুপ চালাতে পারি। আরো কিছু যুক্ত করে দেখতে পারি। নিচের পোগ্রামটা রান করিয়ে দেখতে পারেন।
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); System.out.println(list); list.add("Cox's Bazar"); list.add("Banderbon"); System.out.println("After adding more two Data"); System.out.println(list); } }
প্রোগ্রামটির আউটপুটঃ
[Dhaka, Khulna, Kustia, Noakhali, Bogra] After adding more two Data [Dhaka, Khulna, Kustia, Noakhali, Bogra, Cox's Bazar, Banderbon]
আমরা ইচ্ছে করলে LinkedList এর প্রথমে কোন ডেটা বা শেষে কোন ডেটা এড করতে পারি addFirst(); অথবা addLast(); মেথডের মাধ্যমে।
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); System.out.println(list); list.addFirst("First"); list.addLast("Last"); System.out.println("After adding at First and Last: "); System.out.println(list); } }
আউটপুটঃ
[Dhaka, Khulna, Kustia, Noakhali, Bogra] After adding at First and Last: [First, Dhaka, Khulna, Kustia, Noakhali, Bogra, Last]
আমরা ইচ্ছে করলে কোন একটা ইনডেক্সে ও ডেটা যোগ করতে পারি ইনডেক্স এর নাম্বার দিয়ে। যদি ঐ ইনডেক্সটি খালি হয় তাহলে ডেটাটি যুক্ত হবে। আর যদি ইনডেক্সটি খালি না হয় তাহলে আগের ডেটাটি রিপ্লেস করে নতুন ডেটা বসে যাবে। যেমনঃ
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); System.out.println(list); list.add(1, "Chittagong"); System.out.println("After replacing Khulna by Chittagong: "); System.out.println(list); } }
প্রোগ্রামটির আউটপুটঃ
[Dhaka, Khulna, Kustia, Noakhali, Bogra] After replacing Khulna by Chittagong: [Dhaka, Chittagong, Khulna, Kustia, Noakhali, Bogra]
LinkedList থেকে কোন ডেটা রিমুভ করার জন্য remove() মেথড ব্যবহার করা হয়। list.remove() কল করলে লিস্ট থেকে প্রথম ডেটাটি রিমুভ হয়ে যাবে।
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); System.out.println(list); list.remove(); System.out.println("After calling remove method"); System.out.println(list); } }
আউটপুটঃ
[Dhaka, Khulna, Kustia, Noakhali, Bogra] After calling remove method [Khulna, Kustia, Noakhali, Bogra]
আবার remove(); এর ভেতর কোন ইন্টিজার পাস করলে ঐ ইন্ডেক্সে থাকা ডেটাটি রিমুভ হয়ে যাবে। যেমন remove(2) কল করলে তৃতীয় ডেটাটি রিমুভ হয়ে যাবে। [ইডেক্সিং শুরু হয় ০ থেকে। তাই ০ মানে প্রথম ডেটা, ১ মানে দ্বিতীয় এবং ২ মানে তৃতীয় ডেটা]
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); System.out.println(list); list.remove(2); System.out.println("After calling remove method"); System.out.println(list); } }
আউটপুটঃ
[Dhaka, Khulna, Kustia, Noakhali, Bogra] After calling remove method [Dhaka, Khulna, Noakhali, Bogra]
list.removeFirst(); list.removeLast(); নামে আরো দুটি মেথড রয়েছে যা দিয়ে যথাক্রমে প্রথম ডেটা এবং শেষের ডেটাটি রিমুভ করা যাবে।
package linkedlistdemo; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("Dhaka"); list.add("Khulna"); list.add("Kustia"); list.add("Noakhali"); list.add("Bogra"); System.out.println(list); list.removeFirst(); list.removeLast(); System.out.println("After calling remove method"); System.out.println(list); } }
আউটপুটঃ
[Dhaka, Khulna, Kustia, Noakhali, Bogra] After calling remove method [Khulna, Kustia, Noakhali]
আবার ইচ্ছে করলে সরাসরি কোন ডেটাকে পাস করে রিমুভ করতে পারি। যেমন remove(“Dhaka”); মেথড কল করলে Dhaka রিমুভ হয়ে যাবে।
মনে হয় আমার কাজে আসবে।