در این مقاله فرض میکنیم که شما اطلاعات حدودی از Java Collections دارید.
این سلسله مقالات که برای تکمیل مقاله Java Collections - Everything You MUST Know نوشته شده برای بهبود و درک بهتر collectionها و مواردی که به طور روزمره دارید استفاده میکنید نوشته شده لطفا تمام این دسته بندی رو برای درک بهتر مطالعه کنید .
StringBuilder vs StringBuffer vs String
در جاوا، مجموعهها (Collections) به دو دسته اصلی قابل تغییر (Mutable) و غیرقابل تغییر (Immutable) تقسیم میشوند. این تقسیمبندی بر اساس امکان تغییر محتویات مجموعه پس از ایجاد آن صورت میگیرد.
مجموعههای قابل تغییر به شما اجازه میدهند پس از ایجاد، عناصر را به آنها اضافه، حذف یا تغییر دهید. این ویژگی در بسیاری از سناریوها بسیار مفید است، اما باید با احتیاط استفاده شود، زیرا تغییرات در یک مجموعه میتواند بر روی قسمتهای دیگر برنامه نیز تأثیر بگذارد.
به طور معمول، متدی برای ویرایش مقدار فیلد در خود دارد، و object می تواند گسترش پیدا کند.
مثالهایی از مجموعههای قابل تغییر:
چرا از مجموعههای قابل تغییر استفاده میکنیم؟
مثال :
public class MutableExample { private String name; MutableClass(String name) { this.name = name; } public String getName() { return name; } // this setter can modify the name public void setName(String name) { this.name = name; } public static voidmain(String[] args) { MutableExample obj =newMutableExample("test"); System.out.println(obj.getName()); // update the name, this object is mutable obj.setName("newTest"); System.out.println(obj.getName()); } } // خروجی : test newTest
مجموعههای غیرقابل تغییر پس از ایجاد، نمیتوانند تغییر کنند. هرگونه تغییر در این مجموعهها منجر به ایجاد یک مجموعه جدید میشود. این ویژگی به بهبود امنیت و پایداری برنامه کمک میکند، زیرا از تغییرات ناخواسته در دادهها جلوگیری میکند.
برای ایجاد یک object تغییر ناپدیر (immutable)، کلاس را به صورت final تعریف کرده، و هیچ متدی برای ویرایش فیلدها ایجاد نکنید.
مثالهایی از مجموعههای غیرقابل تغییر:
مثال :
// make this class final, no one can extend this class public final classImmutableExample { private String name; ImmutableExample (String name) { this.name = name; } public String getName(){ return name; } //no setter public static void main(String[] args) { ImmutableExample obj = new ImmutableExample("test"); System.out.println(obj.getName()); // there is no way to update the name after the object is created. // obj.setName("newTest"); //System.out.println(obj.getName()); } } // خروجی test
چرا از مجموعههای غیرقابل تغییر استفاده میکنیم؟
نکته مهم:
جمعبندی:
انتخاب بین مجموعههای قابل تغییر و غیرقابل تغییر به نیازهای خاص برنامه شما بستگی دارد. در حالت کلی، اگر به انعطافپذیری نیاز دارید، از مجموعههای قابل تغییر استفاده کنید و اگر به امنیت و پایداری نیاز دارید، از مجموعههای غیرقابل تغییر استفاده کنید.
منتظر نگاه های زیباتون هستم .
موفق و پیروز باشید.