در حال بارگذاری...

HashSet در Java

یک HashSet<String> به‌نام tags بسازید، tags.add("oak"); بعد tags.add("pine"); و دوباره tags.add("oak"); را صدا بزنید و tags.size() را چاپ کنید. Bin.java را کامپایل کنید و java Bin را اجرا کنید. صفحه باید یک خط نشان دهد: 2. oak دوم مقدار سوم نساخت. مقدارهای یکتا در یک set کار این صفحه است.

مقدار یکتا، نه جفت کلید-و-مقدار

روی صفحهٔ HashMap با put و get کلیدی را به مقدار وصل می‌کردید. HashSet فقط مقدار نگه می‌دارد. هر مقدار حداکثر یک‌بار ظاهر می‌شود. اگر همان واژه را دو بار add کنید، set همچنان یک‌بار نگهش می‌دارد. روی مسیر درس این صفحه رشتهٔ کلید جدا نیست.
Bin.java را باز کنید. نام کلاس public را Bin نگه دارید تا با نام فایل یکی باشد. خطوط باقی‌ماندهٔ HashMap، scores.put، scores.get و هر دموی Desk را پاک کنید. آن‌ها مال صفحهٔ map بودند. هر باقی‌ماندهٔ ArrayList، Rack، Scanner یا nextLine را هم پاک کنید. برنامه نباید منتظر تایپ بماند.
نزدیک بالا، بالای public class Bin، بنویسید:
import java.util.HashSet;
این import نوع HashSet را به نام کوتاه می‌رساند. بدون آن، javac روی این صفحه نام کوتاه HashSet را نمی‌بیند. املای java.util و HashSet را دقیق بنویسید. اینجا import java.util.*; را الزام نکنید — یک import دقیق کافی است.
داخل main مجموعه را بسازید:
HashSet<String> tags = new HashSet<String>();
براکت زاویه‌ای String دارد چون این درس کلمه نگه می‌دارد. نام tags همانی است که نگه می‌دارید. فراخوانی new HashSet<String>() یک set خالی می‌سازد. در این لحظه صفر مقدار دارد.

add برای oak، pine، دوباره oak — بعد size

در یک خط صدا بزنید tags.add("oak");. بعد tags.add("pine");. بعد برای بار سوم همان واژه را با tags.add("oak"); اضافه کنید. فراخوانی سوم set را بزرگ نمی‌کند. بعد بنویسید:
System.out.println(tags.size());
برای فایل اول نگه داشته‌شده اندازه را چاپ کنید، نه کل set. عدد 2 ثابت می‌کند تکرار نادیده گرفته شد. قبل از کامپایل ذخیره کنید.

Bin size after duplicate add

java
import java.util.HashSet;

public class Bin {
    public static void main(String[] args) {
        HashSet<String> tags = new HashSet<String>();
        tags.add("oak");
        tags.add("pine");
        tags.add("oak");
        System.out.println(tags.size());
    }
}

از پوشه‌ای که Bin.java در آن است اجرا کنید javac Bin.java. وقتی پرانتز و آکولاد و براکت زاویه‌ای و نقطه‌ویرگول جور باشند، خودِ javac خطی نمی‌نویسد. بعد java Bin را بزنید — نه java Bin.java و نه java HashSet. پسوند .java را از فرمان اجرا بردارید.
برنامه باید یک خط چاپ کند و بایستد: 2. منتظر تایپ شما نمی‌ماند. اگر ترمینال منتظر ورودی صفحه‌کلید ماند، هنوز صدای nextLine از تمرین قدیمی در فایلی مانده است. آن را پاک کنید و ساخت، سه خط add، و System.out.println(tags.size()); را نگه دارید.
یک‌بار اجرا را راه بروید. Java از Bin.main شروع می‌کند. import از قبل گفته کدام HashSet مد نظر است. خط new set خالی می‌سازد. اولین add مقدار oak را می‌گذارد. دوم pine را می‌گذارد. سومین add("oak") می‌بیند oak از قبل هست و شمارش را بالا نمی‌برد. چاپ size() عدد 2 را می‌نویسد. صفحه 2 را نشان می‌دهد. چیز دیگری نباید چاپ شود. اگر 3 دیدید، این فایل HashSet را اجرا نمی‌کنید، یا واژهٔ سوم متفاوتی مثل elm اضافه کرده‌اید. اگر leaf دیدید، هنوز دموی HashMap از Desk در حال اجراست — بروید سراغ java Bin. اگر [oak, pine] دیدید کل set را چاپ کرده‌اید نه size()؛ برای فایل درس اول چاپ size را نگه دارید.
اگر javac بگوید HashSet را پیدا نمی‌کند، خط import نیست، غلط املا دارد، یا بعد از public class Bin آمده است. import java.util.HashSet; را بالای خط کلاس بگذارید. اگر بدون نقل‌قول بنویسید tags.add(oak);، javac واژهٔ oak را مثل نام گم‌شده می‌بیند. نقل‌قول را نگه دارید. روی این صفحه روی HashSet صدای put نزنید — آن نام مال HashMap است.

پرسیدن با contains

فایل دوم Bin بعد از همان دو add اول چک می‌کند آیا oak داخل set است.

Bin contains oak

java
import java.util.HashSet;

public class Bin {
    public static void main(String[] args) {
        HashSet<String> tags = new HashSet<String>();
        tags.add("oak");
        tags.add("pine");
        System.out.println(tags.contains("oak"));
    }
}

آن فایل دوم را همان‌طور کامپایل و اجرا کنید. صفحه true را نشان می‌دهد. فراخوانی contains("oak") می‌پرسد آیا آن مقدار داخل set است. یک boolean برمی‌گرداند. اگر بعد از فقط oak و pine بپرسید contains("elm")، صفحه false نشان می‌دهد — آن درست است، ولی فایل دوم نگه داشته‌شده "oak" را به‌کار می‌برد تا صفحه true باشد.
روی این صفحه حلقه روی set را الزام نکنید. صفحهٔ بعد — iterating — مجموعه‌ها را پیمایش می‌کند. اینجا با add و size و contains بمانید.

روبه‌روی HashMap

یک جدول کوتاه تفاوت را روشن نگه می‌دارد.

📊 HashSet vs HashMap

Piece On this page
store tags.add("oak"); — value only
duplicate second add("oak") does not grow size
read check tags.contains("oak") → true
HashMap leftover put / get — not this page’s path
جدول فقط یادآوری است. قطعه‌هایی که نگه می‌دارید import مربوط به HashSet، خط ساخت، صداهای add، size() و contains هستند.

در مقایسه با HashMap و با ArrayList

روی صفحهٔ HashMap، فراخوانی‌های put و get کلید داشتند. روی این صفحه add و contains خودِ مقدار را به‌کار می‌برند. فایل Desk که leaf چاپ می‌کند درس دیگری است. برای این صفحه HashSet<String> tags و دموی size با چاپ 2 را نگه دارید.
یک ArrayList می‌تواند همان واژه را دو بار نگه دارد. یک HashSet برای دومین add یکسان آن واژه بزرگ نمی‌شود. همان یکتایی نکتهٔ این درس است. در دموهای Bin صدای tags.get(0) را قاطی نکنید — set روی این صفحه از شمارهٔ خانهٔ list استفاده نمی‌کند.
وقتی فایل‌های قدیمی Desk.java یا Rack.java هنوز نزدیک‌اند، اگر فرمان اجرا را گیج نمی‌کنند همان بگذارید، یا فقط وقتی گیج می‌کنند پاکشان کنید. بعد از کامپایل فایل HashSet این درس، java Bin را اجرا کنید.

چه چیزی برای iterating می‌ماند

این صفحه مجموعه‌ای از مقدارهای یکتا را باز می‌کند. صفحهٔ بعد مجموعه‌ها را با حلقه راه می‌رود. اینجا با add و size و contains بمانید. روی این صفحه for-each روی set را الزام نکنید؛ هدف درس یکتایی و صفحهٔ 2 از size() است.

قبل از iterating

می‌توانید java.util.HashSet را import کنید، HashSet<String> tags بسازید، oak و pine و دوباره oak را add کنید، بعد با چاپ tags.size() عدد 2 را ببینید. فایل دوم می‌تواند با چاپ tags.contains("oak") مقدار true را نشان دهد. برای هر دموی نگه داشته‌شده Bin.java را کامپایل کنید و java Bin را اجرا کنید. set مقدارهای یکتا را نگه داشت. صفحهٔ بعد iterating است، جایی که مقدارهای یک مجموعه را یکی‌یکی راه می‌روید.
import را بالای کلاس نگه دارید. در دموی size همان add("oak") تکراری را نگه دارید تا شمارش 2 بماند. برای چک boolean همان contains را نگه دارید. این عادت‌ها ایستگاه بازرسی این صفحه قبل از رفتن جلو هستند. وقتی بعد از سه add با oak تکراری، size() عدد 2 را نشان داد، HashSet کار این درس را کرده و برای موضوع بعد آماده‌اید.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود