آرایه SparseArray در اندروید

سلام دوستان عزیز ، تو این مقاله قصد دارم در مورد مجموعه SparseArray صحبت کنم ولی به نظرم برای شروع بهتره چند تا مفهموم رو با هم مرور کنیم :

داده های اولیه ( Primitive Data Types )

انواع داده های اولیه هشت اصل تعریف شده در جاوا عبارتند از: int، byte، short، long، float، double، boolean و char. اینها اشیا در نظر گرفته نمی شن و مقادیر خام را نشون میدن. و مستقیما داخل stack ذخیره میشن.

کلاس های Wrapper

کلاس های Wrapper اصطلاحا به کلاس هایی میگن که توانایی تبدیل مقادیر Primitive Data Types را به Object و برعکس را دارا هستن و امکان استفاده از Primitive Data Type ها رو به عنوان Object به ما میدن.

عملیات AutoBoxing

به عملیاتی که طی اون مقدار Primitive Data Type به Object از Wrapper Class تبدیل بشه رو AutoBoxing میگن .

عملیات UnBoxing

برعکس عملیات AutoBoxing هستش و به عملیاتی گفته میشه که طی اون یک Object از Wrapper Class به مقدار Primitive Data Type تبدیل می شه.

خوب بریم سراغ اصل مطلب !

آرایه SparseArray

یه لیست پراکنده اس که میتونه خونه های خالی داشته باشه و با اعداد صحیح به عنوان کلید پر میشه و جایگزینی برای map هستش ،map نیاز داره که کلیدهای از نوع Object داشته باشه ، زمانی که از داده اولیه int به عنوان کلید در map استفاده کنیم کامپایلر به طور خودکار این داده اولیه int رو به wrapper class مربوط به خودش تبدیل میکنه (integer) .

خوب نکته همین جاست !

تفاوت در استفاده از حافظه در map و SparseArray قابل توجه ، به این دلیل که int فقط ۴ بایت از حافظه رو استفاده میکنه ولی integer به ۱۶ بایت از حافظه نیاز داره و SparseArray از int به عنوان مقدار کلید استفاده میکنه .

یه نکته ، در SparseArray لازم نیست کلیدها رو مرتب و پشت سرهم وارد کنیم بلکه به صورت خودکار کلیدها به صورت صعودی مرتب میشن نه به ترتیبی که اضافه شدن.

عملیات در SparseArray به صورت زیر هستش :

  • اضافه کردن ---------------- sparseArray.put(10,"test1")
  • پاک کردن ---------------- sparseArray.remove(10)
  • فراخوانی ---------------- sparseArray.get(10)
  • فراخوانی کلید با ایندکس ---------------- sparseArray.keyAt(0)
  • فراخوانی مقدار با ایندکس ---------------- sparseArray.valueAt(0)


خیلی خوشحال میشم در صورتی که این نوشته رو دوست داشتید ❤️ کنید یا نظرتون را از طریق کامنت برام بنویسید.