تاریخ امروز:31 فروردین 1403
Collection در جاوا چیست؟

Collection در جاوا چیست؟

خب، بعد از مدت‌ها با یک آموزش دیگه از جاوا برگشتم. در این آموزش می‌خوام Collection در جاوا را توضیح بدهم. Collectionها در جاوا گروهی از اشیا هستند. در واقع برای نگهداری از گروهی از اشیا مورد استفاده قرار می‌گیرند. معمولا ما در جاوا از Collection framework استفاده می‌کنیم. فریمورک در جاوا مجموعه‌ای از کلاس‌ها، اینترفیس‌ها و … هستن که به منظور خواصی برنامه‌نویسی شده‌اند. Collection framework نشان دهنده یک سری دستورات و متدهای یکپارچه برای ذخیره و دستکاری گروهی از اشیا می باشد.

در پست‌های قبلی با Linkedlist و ArrayList آشنا شده‌اید، در این پست‌ها از دستورات Collection Framework استفاده شده است. در این اینترفیس موارد دیگری وجود دارد، مانند: HashSet، Maps، StockList که در ادامه‌ی این سری آموزش، تمامی این موارد را خواهم گفت.

ما در ۲ آموزش قبلی، یک مقدار String یا Int یا … رو فرستادیم به ArrayList یا LinkedList مون. ولی در بحث Collection ما یک شی رو ازش ArrayList میسازیم. شاید بشه گفت یکی از کاربردی‌ترین مباحث جاوا همین موضوع باشه. قبل از یادگیری این بحث، شما حتما باید با مفهوم کلاس و شی‌گرایی کاملا آشنا باشین و بهش مسلط شده باشین.

برای توضیح این مبحث، فکر می‌کنم بهترین کار یک مثال باشه:

public class Car {
    private int totalSpeed;
    private String Name;
    private String Brand;

    public Car(int totalSpeed, String name, String brand) {
        this.totalSpeed = totalSpeed;
        Name = name;
        Brand = brand;
    }

    public int getTotalSpeed() {
        return totalSpeed;
    }

    public void setTotalSpeed(int totalSpeed) {
        this.totalSpeed = totalSpeed;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getBrand() {
        return Brand;
    }

    public void setBrand(String brand) {
        Brand = brand;
    }

    public double calcHalfSpeed(){
        double a;
        a = (double)totalSpeed/2;
        return a;
    }
}

در بالا یک کلاس تعریف کردیم به اسم Car که یک سری متغیر‌ها درونش داشت و یک تابع ساده به اسم calcHalfSpeed که نصف سرعت ورودی رو محاسبه می‌کرد برای ما. حال در تابع Main خودمون میایم اینجوری می‌نویسیم:

        List<Car> myCars = new ArrayList<>();
        Car data1 = new Car();
        data1.setBrand("BMW");
        data1.setName("X3");
        data1.setTotalSpeed(220);
        myCars.add(data1);
        Car data2 = new Car();
        data2.setBrand("Benz");
        data2.setName("S500");
        data2.setTotalSpeed(230);
        myCars.add(data2);

        System.out.println(myCars.get(1).calcHalfSpeed());

و وقتی کد رو اجرا کنیم خروجی برابر 115.0 را مشاهده می‌کنیم.

حال بیایم یک مثال کاربردی تر بزنیم برای این موضوع.

تصور کنید که برای رزرو صندلی‌های یک تاتر قرار است برنامه‌ای بنویسید. کلاس صندلی رو اینجوری تعریف می‌کنیم:

public class Seat {
    private final String seatNumber;
    private boolean reserved = false;

    public Seat(String seatNumber) {
        this.seatNumber = seatNumber;
    }
    public boolean reserve(){
        if(!this.reserved){
            this.reserved = true;
            System.out.println("Sandali"+ seatNumber+" reserve shod");
            return true;
        }else{
            return false;
        }
    }
    public boolean cancle(){
        if(this.reserved){
            this.reserved = false;
            System.out.println("Sandali"+ seatNumber+" az reserve kharej shod");
            return true;
        }else{
            return false;
        }
    }

    public String getSeatNumber() {
        return seatNumber;
    }
}

و کلاس تاتر رو به این صورت:

public class Theatre {
    private final String theatreName;
    private List<Seat> seats = new ArrayList<>();

    public Theatre(String theatreName, int numRows, int seatPerRow) {
        this.theatreName = theatreName;

        int lastRow = 'A' + (numRows -1);
        for (char row = 'A'; row< lastRow; row++){
            for (int seatNum = 1; seatNum <= seatPerRow; seatNum++){
                Seat seat = new Seat(row + String.format("%02d",seatNum));
                seats.add(seat);
            }
        }
    }

    public String getTheatreName() {
        return theatreName;
    }
    public boolean reserveSeat(String seatNumber){
        Seat requestSeat = null;
        for(Seat seat : seats){
            if(seat.getSeatNumber().equals(seatNumber)){
                requestSeat = seat;
                break;
            }
        }
        if(requestSeat == null){
            System.out.println("In Shomare Sandali Vujud Nadarad:" + seatNumber);
            return false;
        }
        return  requestSeat.reserve();
    }

    //For Testing
    public void getSeats(){
        for (Seat seat : seats){
            System.out.println(seat.getSeatNumber());
        }
    }

}

حال در داخل تابع Main ، این دستورات را قرار می‌دهیم:

        Theatre theatre = new Theatre("Azadi",8,12);
        theatre.getSeats();
        if(theatre.reserveSeat("G11")){
            System.out.println("Lotfan Pule Sandali ro Pardakht konid");
        }else {
            System.out.println("Moteasefane in Sandali Ham aknun Reserve shode ast");
        }

        System.out.println("---------------------");
        if(theatre.reserveSeat("G11")){
            System.out.println("Lotfan Pule Sandali ro Pardakht konid");
        }else {
            System.out.println("Moteasefane in Sandali Ham aknun Reserve shode ast");
        }

و برنامه رو اجرا می‌کنیم.

همانطوری که در مبحث کلاس‌ها مطرح شد، بهتر است برای اینکه مفهوم Collection در جاوا را به طور کامل درک کنید، به کلاس،‌ به چشم یک بسته نگاه کنید. این بسته رو حالا می‌تونید جابه‌جا کنید و به بخش‌های مختلف برنامه پاس بدید.

2 Comments

  1. آواتار احمد محمدیاحمد محمدی پاسخ

    سلام و درود بنظرم سایتتون خوبه و در مواردی پیشروست نسبت به سایر سایت ها ، ولی کدهاتون ناخواناست بدلیل جهت و رنگ پس زمینه و فونت ریز و رنگ یکسان برای همه المان ها ؛ بنظرم همین باعث میشه اون نتیجه دلخواه رو نه برای خودتون و نه برای کاربرها داشته باشه .

    1. آواتار سروش طیبیسروش طیبی Post author پاسخ

      سلام
      حق با شماست، به خاطر یه سری مشغله‌های شخصی نرسیدم زیاد به سایت. انشالله تا چند وقت دیگه بر میگردم و هم سایت رو عوض می‌کنم ظاهرش رو که این مشکلات حل بشه و هم اینکه ادامه میدم آموزش‌ها رو.

پاسخ دادن به سروش طیبی لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *