JShell জাভা ৯-এ একটি কমান্ড-লাইন টুল যা এক্সপ্রেশন, ক্লাস, ইন্টারফেস, মেথড ইত্যাদি সিম্পল স্টেটমেন্ট এক্সিকিউট করতে ব্যবহৃত হয়।
একটি Set জাভাতে একটি ইন্টারফেস যা ইউনিক এলিমেন্ট 가진 কলেকশনের জন্য কনট্র্যাক্ট নির্দিষ্ট করে। যদি object1.equals(object2) true রিটার্ন করে, তবে object1 এবং object2-র শুধু একটি Set ইমপ্লিমেন্টেশনে থাকতে পারে।
নিচের কোড স্নিপেটে, আমরা Set.of() মেথড ব্যবহার করেছি। Set.of() মেথড থেকে রিটার্ন হওয়া কলেকশন ইমিউটেবল, তাই এটি add() মেথড সাপোর্ট করে না। যদি আমরা এলিমেন্ট অ্যাড করার চেষ্টা করি, তবে UnsupportedOperationException থ্রো করে। যদি আমরা HashSet কলেকশন তৈরি করতে চাই, যা add() মেথড সাপোর্ট করে Set-এর ইউনিক প্রোপার্টি টেস্ট করার জন্য। এটি false রিটার্ন করে যা ইন্ডিকেট করে ডুপ্লিকেট "Adithya" এন্ট্রি ইনসার্ট করা ব্যর্থ হয়েছে।
স্নিপেট-১
jshell> Set<String> set = Set.of("Adithya", "Chaitanya", "Jai"); set ==> [Jai, Adithya, Chaitanya]
jshell> set.add("Adithya"); | java.lang.UnsupportedOperationException thrown:
jshell> Set<String> hashSet = new HashSet<>(set); hashSet ==> [Chaitanya, Jai, Adithya]
jshell> hashSet.add("Adithya"); $8 ==> false
jshell> hashSet
hashSet ==> [Chaitanya, Jai, Adithya]
নিচের কোড স্নিপেটে, আমরা HashSet ইমপ্লিমেন্ট করেছি যেখানে এলিমেন্টগুলো না ইনসারশন অর্ডারে থাকে না সর্টেড অর্ডারে।
স্নিপেট-২
jshell> Set<Integer> numbers = new HashSet<>(); numbers ==> [] jshell> numbers.add(12345); $11 ==> true jshell> numbers.add(1234); $12 ==> true jshell> numbers.add(123); $13 ==> true jshell> numbers.add(12); $14 ==> true jshell> numbers numbers ==> [1234, 12345, 123, 12]
নিচের কোড স্নিপেটে, আমরা LinkedHashSet ইমপ্লিমেন্ট করেছি যেখানে এলিমেন্টগুলো ইনসারশন অর্ডারে সংরক্ষিত থাকে।
স্নিপেট-৩
jshell> Set<Integer> numbers1 = new LinkedHashSet<>(); numbers1 ==> [] jshell> numbers1.add(12345); $17 ==> true jshell> numbers1.add(1234); $18 ==> true jshell> numbers1.add(123); $19 ==> true jshell> numbers1.add(12); $20 ==> true jshell> numbers1 numbers1 ==> [12345, 1234, 123, 12] jshell> numbers1.add(123456); $22 ==> true jshell> numbers1 numbers1 ==> [12345, 1234, 123, 12, 123456]
নিচের কোড স্নিপেটে, আমরা TreeSet ইমপ্লিমেন্ট করেছি যেখানে এলিমেন্টগুলো সর্টেড অর্ডারে সংরক্ষিত থাকে।
স্নিপেট-৪
jshell> Set<Integer> numbers2 = new TreeSet<>(); numbers2 ==> [] jshell> numbers2.add(12345); $25 ==> true jshell> numbers2.add(1234); $26 ==> true jshell> numbers2.add(123); $27 ==> true jshell> numbers2.add(12); $28 ==> true jshell> numbers2 numbers2 ==> [12, 123, 1234, 12345] jshell> numbers2.add(123456); $30 ==> true jshell> numbers2 numbers2 ==> [12, 123, 1234, 12345, 123456]