HashMap در Java
یک HashMap<String, String> بهنام scores بسازید، scores.put("oak", "leaf"); را صدا بزنید، بعد scores.get("oak") را چاپ کنید. Desk.java را کامپایل کنید و java Desk را اجرا کنید. صفحه باید یک خط نشان دهد: leaf. کلید "oak" مقدار "leaf" را پیدا میکند. گذاشتن یک جفت و خواندن دوباره با همان کلید کار این صفحه است.
کلیدی که مقدار را پیدا میکند
روی صفحهٔ list-methods با شمارهٔ خانه به مقدار میرسیدید: get(0). HashMap با کلیدی که خودتان انتخاب میکنید به مقدار میرسد. جفت را با put مینویسید. مقدار را با get و همان کلید میخوانید. برای مسیر درس این صفحه خانهٔ صفر نیست — کلید همان برچسب است.
Desk.java را باز کنید. نام کلاس public را Desk نگه دارید تا با نام فایل یکی باشد. خطوط باقیماندهٔ ArrayList، tags.get(0)، tags.size()، tags.remove(0) و هر دموی Rack یا Shelf را پاک کنید. آنها مال صفحات list بودند. هر Scanner، nextLine یا خواندن صفحهکلید را هم پاک کنید. برنامه نباید منتظر تایپ بماند.
نزدیک بالا، بالای public class Desk، بنویسید:
import java.util.HashMap;
این import نوع HashMap را به نام کوتاه میرساند. بدون آن، javac روی این صفحه نام کوتاه HashMap را نمیبیند. املای java.util و HashMap را دقیق بنویسید. اینجا import java.util.*; را الزام نکنید — یک import دقیق کافی است.
داخل main نقشه را بسازید:
HashMap<String, String> scores = new HashMap<String, String>();
نوع اول داخل براکت زاویهای نوع کلید است. نوع دوم نوع مقدار است. روی این صفحه هر دو Stringاند تا دمو با کلمه بماند. نام scores همانی است که در فایل درس نگه میدارید. فراخوانی new HashMap<String, String>() یک نقشهٔ خالی میسازد. در این لحظه هیچ جفتی ندارد.
put برای oak به leaf، بعد get برای oak
در یک خط صدا بزنید scores.put("oak", "leaf");. واژهٔ نقلقول اول کلید است. واژهٔ نقلقول دوم مقدار است. ترتیب داخل put مهم است: اول کلید، بعد مقدار. در فایل نگه داشتهشده جایشان را عوض نکنید.
بعد بنویسید:
System.out.println(scores.get("oak"));
همان کلید "oak" را به get بدهید. برای فایل نگه داشتهشده "leaf" را بهعنوان آرگومان get ندهید — get کلید میخواهد نه مقدار. scores.get(0) ننویسید — آن شکل list از Rack است، نه شکل map اینجا. قبل از کامپایل ذخیره کنید.
import java.util.HashMap;
public class Desk {
public static void main(String[] args) {
HashMap<String, String> scores = new HashMap<String, String>();
scores.put("oak", "leaf");
System.out.println(scores.get("oak"));
}
}
از پوشهای که Desk.java در آن است اجرا کنید javac Desk.java. وقتی پرانتز و آکولاد و براکت زاویهای و نقطهویرگول جور باشند، خودِ javac خطی نمینویسد. بعد java Desk را بزنید — نه java Desk.java و نه java HashMap. پسوند .java را از فرمان اجرا بردارید. کلاسی را شروع کنید که main دارد.
برنامه باید یک خط چاپ کند و بایستد: leaf. منتظر تایپ شما نمیماند. اگر ترمینال منتظر ورودی صفحهکلید ماند، هنوز صدای nextLine از تمرین قدیمی در فایلی مانده است. آن را پاک کنید و ساخت HashMap، خط put، و System.out.println(scores.get("oak")); را نگه دارید.
یکبار اجرا را راه بروید. Java از Desk.main شروع میکند. import از قبل گفته کدام HashMap مد نظر است. خط new نقشهٔ خالی میسازد. put جفت oak → leaf را ذخیره میکند. فراخوانی get("oak") مقدار leaf را برمیگرداند. خط چاپ همان واژه را مینویسد. صفحه leaf را نشان میدهد. چیز دیگری نباید چاپ شود. اگر oak دیدید، کلید را دستی چاپ کردهاید یا آرگومان get غلط است. اگر 2 یا [pine] دیدید، هنوز دموی size یا remove از Rack را اجرا میکنید — بروید سراغ java Desk.
اگر javac بگوید HashMap را پیدا نمیکند، خط import نیست، غلط املا دارد، یا بعد از public class Desk آمده است. import java.util.HashMap; را بالای خط کلاس بگذارید. اگر قبل از هر put صدای get("oak") بزنید، چاپ میتواند null نشان دهد چون آن کلید ذخیره نشده. روی این صفحه put را قبل از get نگه دارید. اگر بدون نقلقول بنویسید scores.put(oak, leaf);، javac واژهها را مثل نامهایی میبیند که وجود ندارند. دور کلید و مقدار نقلقول بگذارید.
چاپ کل نقشه بهعنوان نگاه دوم
فایل دوم Desk بعد از همان put خودِ شیء نقشه را چاپ میکند. آن شکل جفتی را نشان میدهد که Java وقتی خود نقشه را چاپ میکنید بهکار میبرد.
import java.util.HashMap;
public class Desk {
public static void main(String[] args) {
HashMap<String, String> scores = new HashMap<String, String>();
scores.put("oak", "leaf");
System.out.println(scores);
}
}
آن فایل دوم را همانطور کامپایل و اجرا کنید. صفحه {oak=leaf} را نشان میدهد — کلید، علامت تساوی، مقدار، داخل آکولاد. آن شکل برای تأیید اینکه جفت داخل نقشه است مفید است. مسیر درس برای صفحهٔ کوئیز leaf همان فایل اول با get("oak") است. چاپ کل نقشه را فقط برای دیدن جفت ذخیرهشده بهکار ببرید. در هیچکدام از فایلهای Desk، get(0) را قاطی نکنید — روی این صفحه map از شمارهٔ خانهٔ list استفاده نمیکند.
اگر صفحه [] یا [oak, pine] نشان داد، هنوز دموی ArrayList در حال اجراست. با HashMap و java Desk بمانید.
در مقایسه با get لیست و با put
روی صفحهٔ list-methods، بعد از add، فراخوانی get(0) به اندیس خانه نیاز داشت. روی این صفحه، بعد از put، فراخوانی get("oak") به رشتهٔ کلید نیاز دارد. فایل Rack که فقط tags.get(0) چاپ میکند درس دیگری است. برای این صفحه در Desk نگهدارید put("oak", "leaf") و get("oak").
با چند put میتوانید جفتهای بیشتری ذخیره کنید. این صفحه یک جفت نگه میدارد تا کلید و مقدار چاپشده آسان دیده شوند. صفحهٔ بعد — HashSet — مقدارهای یکتا را بدون داستان جداگانهٔ کلید-و-مقدار نگه میدارد. اینجا با put و get در HashMap بمانید.
وقتی فایلهای قدیمی Rack.java یا Shelf.java هنوز نزدیکاند، اگر فرمان اجرا را گیج نمیکنند همان بگذارید، یا فقط وقتی گیج میکنند پاکشان کنید. بعد از کامپایل فایل HashMap این درس، java Desk را اجرا کنید.
چه چیزی برای HashSet میماند
این صفحه ذخیرهٔ کلید-و-مقدار را با HashMap باز میکند. صفحهٔ بعد مجموعهای از مقدارهای یکتا را با HashSet باز میکند. اینجا با put و get روی نقشه بمانید. روی این صفحه add مربوط به set را الزام نکنید؛ هدف درس کلیدی است که مقدار را پیدا میکند و صفحهٔ leaf.
قبل از HashSet
میتوانید java.util.HashMap را import کنید، HashMap<String, String> scores بسازید، scores.put("oak", "leaf"); را صدا بزنید، بعد scores.get("oak") را چاپ کنید. Desk.java را کامپایل کنید و java Desk را اجرا کنید. صفحه leaf را نشان میدهد. کلید مقدار را پیدا کرد. صفحهٔ بعد HashSet است، جایی که مقدارهای یکتا را بدون جفت کردن هر کدام به یک کلید جدا روی مسیر آن درس نگه میدارید.
import را بالای کلاس نگه دارید. put را قبل از get نگه دارید. کلید "oak" را در هر دو فراخوانی یکسان نگه دارید. این سه عادت ایستگاه بازرسی این صفحه قبل از رفتن جلو هستند. وقتی بعد از get("oak") صفحه leaf را نشان داد، HashMap کار این درس را کرده و برای موضوع بعد آمادهاید.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود