در این مقاله فرض میکنیم که شما اطلاعات حدودی از Java Collections دارید.
این سلسله مقالات که برای تکمیل مقاله Java Collections - Everything You MUST Know نوشته شده برای بهبود و درک بهتر collectionها و مواردی که به طور روزمره دارید استفاده میکنید نوشته شده لطفا تمام این دسته بندی رو برای درک بهتر مطالعه کنید .
در جاوا، HashMap، TreeMap و Set همه برای ذخیره مجموعهای از دادهها استفاده میشوند، اما هر کدام ویژگیها و کاربردهای خاص خود را دارند. برای درک بهتر این تفاوتها، بیایید هر یک را به طور جداگانه بررسی کنیم:
HashMap
تعریف: HashMap یک پیادهسازی از رابط Map است که از یک جدول هش برای ذخیره دادهها استفاده میکند.
ویژگیها:سرعت: عملیات جستجو، درج و حذف در HashMap به طور متوسط زمان ثابت (O(1)) دارند که آن را بسیار سریع میکند. ترتیب: عناصر در HashMap به صورت نامنظم ذخیره میشوند. کلیدها: کلیدها باید منحصر به فرد باشند و میتوانند null باشند. مقدارها: مقدارها میتوانند تکراری باشند و میتوانند null باشند.
کاربرد: زمانی که به سرعت دسترسی به عناصر نیاز دارید و ترتیب ذخیرهسازی اهمیت ندارد، از HashMap استفاده میشود.
TreeMap
تعریف: TreeMap یک پیادهسازی دیگر از رابط Map است که از یک درخت قرمز-سیاه برای ذخیره دادهها استفاده میکند.
ویژگیها:سرعت: عملیات جستجو، درج و حذف در TreeMap زمان لگاریتمی (O(log n)) دارند. ترتیب: عناصر در TreeMap بر اساس کلیدهای طبیعی یا یک مقایسهکننده سفارشی مرتب میشوند. کلیدها: کلیدها باید منحصر به فرد باشند و قابل مقایسه باشند. مقدارها: مقدارها میتوانند تکراری باشند و میتوانند null باشند.
کاربرد: زمانی که به یک مجموعه مرتب شده نیاز دارید و ترتیب ذخیرهسازی مهم است، از TreeMap استفاده میشود.
Set
تعریف: Set یک رابط در جاوا است که مجموعهای از عناصر منحصر به فرد را نمایش میدهد.
ویژگیها:عناصر منحصر به فرد: هر عنصر فقط یک بار میتواند در یک Set وجود داشته باشد. ترتیب: ترتیب عناصر در Set مشخص نیست (مگر اینکه از یک پیادهسازی خاص مانند TreeSet استفاده شود).
پیادهسازیها:HashSet: بر اساس HashMap ساخته شده و سریعترین پیادهسازی Set است. TreeSet: بر اساس TreeMap ساخته شده و عناصر را به صورت مرتب شده ذخیره میکند.
جدول مقایسه :
چه زمانی از کدام یک استفاده کنیم؟
HashMap: زمانی که به سرعت دسترسی به عناصر نیاز دارید و ترتیب ذخیرهسازی اهمیت ندارد.
TreeMap: زمانی که به یک مجموعه مرتب شده نیاز دارید و ترتیب ذخیرهسازی مهم است.
HashSet: زمانی که به یک مجموعه منحصر به فرد نیاز دارید و سرعت مهمترین عامل است.
TreeSet: زمانی که به یک مجموعه منحصر به فرد و مرتب شده نیاز دارید.
مثال خیلی ساده :
// HashMap
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
// TreeMap
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("apple", 1);
treeMap.put("banana", 2);
// HashSet
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
در نهایت، انتخاب بین HashMap، TreeMap و Set به نیازهای خاص برنامه شما بستگی دارد.