1- تفاوت HashMap
و HashTable
:
کلاس HashMap
از نوع synchronize نیست پس thread-safe نیست. اما کلاس HashTable
از نوع synchronize هستش.
کلاس HashMap
بخاطر synchronize نبودن کمی سریعتر از HashTable
عمل میکنه.
کلاس HashMap
اجازه داشتن یک کلید null و چندین مقدار null رو داره، اما کلاس HashTable
همچین اجازه ای رو نداره.
کلاس HashMap
زیرکلاس AbstractMap
هستش، اما کلاس HashTable
زیرکلاس Dictionary
هستش.
کلاس HashTable
تقریباً منسوخ شده و باید از جایگزینش ConcurrentHashMap
استفاده بشه.
و...
در بیشتر موارد کلاس HashMap
استفاده میشه، درصورتی که synchronization در اولویت نباشه.
2- برای حل مشکل ValueError: unsupported pickle protocol در لینوکس کافیه فایل .repopickle_.gitconfig در Android SDK رو پیدا و حذف کنید.
3- اصول طراحی کلاس:
- همیشه داده ها و فیلدها رو private
نگهدارید و از اصول encapsulation پیروی کنید.
- همیشه فیلدها رو initialize کنید.
- هرکلاس رو به یک نوع/دسته از داده اختصاص بدید.
- کلاسهای چند منظوره با چند مسئولیت طراحی نکنید، بلکه آنها را تجزیه و جداسازی کنید.
- بی دلیل برای همه فیلدها و داده ها accessor و mutator طراحی نکنید. (set/get
)
- همیشه بهترین و مناسبترین نام رو برای کلاس و متد تعیین کنید تا هدف رو بخوبی انعکاس بدهند.
- حتاالمکان کلاسها رو immutable (غیرقابل تغییر) طراحی کنید.
- بجای استفاده مکرر تودرتو if/else switch foreach
از interface
یا کلاس abstract
استفاده کنید.
- حتاالمکان کلاس رو static
طراحی نکنید. (بخاطر global state و مشکلات unit testing)
- از نوشتن متدهای طولانی و سنگین خودداری کنید. معمولاً متدهای طویل نشاندهنده رفتار و وظایف متعدد هستش که نیاز به تجزیه و refactoring داره.
- از قانون DRY (مخفف Don’t Repeat Yourself) پیروی کنید... متدهای تکراری رو با ساخت superclass abstract
یکی کنید.