package Collection;

import java.util.Set;
import java.util.TreeSet;

public class Person implements Comparable<Person> {
    private String name;
    public Person(String name) {
        this.name=name;
    }
    public String toString() {
        return name;
    }
    @Override
    public int compareTo(Person o) {
        return name.compareTo(o.name);
    }
}

class TreeSetExample {
    public static void main(String[] args) {
        Set<Person> persons=new TreeSet<>();
        persons.add(new Person("Lelin"));
        persons.add(new Person("Kayes"));
        persons.add(new Person("Shomrat"));
        persons.add(new Person("Shamim"));
        persons.add(new Person("Abbas"));

        for (Person person : persons) {
            System.out.println(person);
        }
    }
}

asked 08 Oct, 19:01

Lelin07's gravatar image

Lelin07
313

edited 09 Oct, 05:18

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
53118


আসসালামু আলাইকুম

আপনার প্রোগ্রামটি আসলে সেট রিলেটেড । সেট এর প্রোগ্রাম করার আগে আমাদের জানতে হবে তা কি এবং কিভাবে কাজ করে ? সেট হচ্ছে লিস্টের মত কন্টেইনার যাতে কোন ডুপ্লিকেট এলিমেন্ট থাকতে পারে না ।
সেটের ৩ টি ইমপ্লিমেন্টশন রয়েছ

১। HashSet (HashSet element গুলোর কোন নির্দিষ্ট অডারিং করে না )
২। LinkedHashSet (যে অর্ডারে আপনি এলিমেন্ট যুক্ত করবেন সেই অর্ডারে তা স্টোর করা থাকবে )।
৩। TreeSet ( এটি সরাসরি SortedSet ইন্টারফেসকে ইমপ্লিমেন্ট করে । এর মানে হচ্ছে সেটের এলিমেন্টগুলো সবসময় সর্টেড অবস্থায় থাকে ।

আপনার কোডটিও ট্রিসেট এর ইমপ্লিমেন্টশন । ট্রি সেট যে অবজেক্ট এ রাখা হবে তাকে অবশ্যই java.lang.Comparableইন্টারফেসটি ইমপ্লিমেন্ট করতে হবে।

আপনার কোড এর ব্যাখা

জাভাতে শুরুতে একটি ক্লাসকে ডিক্লেয়ার করতে হয় তারপর মেইন ফাংশন । তারপর আপনার কোড এ সেট ডিক্লেয়ার করেছে ঃ

public class TreeSet{
    public static void main(String hehehe[]) {
        Set<Person> person = new TreeSet<>();

আপনি জেনেরিক টাইপ নিজে নিজে ইমপ্লিমেন্টস করছেন, Person নামে । কোন সমস্যা নেই । এখন আমরা যে কাজটি করবো তা হল Comparable interface-কে ইমপ্লিমেন্ট করবো:

public class Person implements Comparable<Person>{
    // যেহেতু আপনার কোড এ আপনি শুধু স্ট্রিং এড করেছেন তাই আমি ও স্ট্রিং এর টাইপ জেনেরিকস করবো ।   
    String name;  
    // এখন একটি কন্সট্রাকটর নিবো: 
    public Person (String name){
    this.name = name ; // this এর কাজ হচ্ছে একই ক্লাস এর আন্ডারে ভেরিয়েবল কে একসেস করা । 
}

তারপর আমরা মেথড কল করবো:

public String toString(){
    return name;
}

//আমি শুরুতে বলেছিলাম ট্রিসেট এর অভাবনীয় কাজ কি ? সে নিমিষেই সকল ইলিমেন্টকে সর্টেড করে ফেলে।     
আমরা compareTo method ব্যবহার করবো।  
public int compareTo(Person S){
    return name.compareTo(S.name);
}

এই compareTo method-এর ৩টা কাজ, মানে রিটার্ন ভ্যালু ৩ টা।

  1. equal to 0
  2. less than 0
  3. greater than 0

আপনার কোডটিও একই কাজ করে । আরেকটি উদাহরণ দিলে বুঝতে সহজ হবে:

Double obj1 = new Double(124); 
Double obj2 = new Double(167);     
int compareValue = obj1.compareTo(obj2);
if (compareValue == 0) 
    System.out.println("object1 and object2 are equal"); 
else if (compareValue < 0) 
    System.out.println("object1 is less than object2"); 
else
    System.out.println("object1 is greater than object2");

এটার আউটপুট আসবে: object1 is less than object2

এখন আসি মেইন ফাংশনে, persons.add(new Person("Lelin")); যখন এটা কম্পাইল হচ্ছে তখন

alt text

এভাবে প্রত্যেকটি এড এর জন্য হচ্ছে ।

এরপর কম্পেয়ার টু কল হচ্ছে

alt text

alt text
আপনার কোড এর আউটপুট আসবে:

alt text

আশা করি বুঝতে পেরেছেন । না বুঝলে দয়া করে বলবেন । ধন্যবাদ ।

permanent link

answered 13 Oct, 03:53

mhridoy's gravatar image

mhridoy
665

edited 13 Oct, 08:45

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
53118

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×208
×70
×51

question asked: 08 Oct, 19:01

question was seen: 101 times

last updated: 13 Oct, 08:45