CodeGym /وبلاگ جاوا /Random-FA /مجموعه جاوا به عنوان یک رابط
John Squirrels
مرحله
San Francisco

مجموعه جاوا به عنوان یک رابط

در گروه منتشر شد
مجموعه به سادگی مجموعه ای از اشیاء منحصر به فرد است. منحصر به فرد به این معنی است که هیچ دو شی نمی توانند مقدار(های) یکسانی داشته باشند. بسته به اجرای مجموعه، ممکن است سفارش داده شود یا نباشد. مجموعه جاوا، به عنوان یک نوع داده انتزاعی (ADT)، دارای چند عملیات کلیدی است (که در آن T نشان دهنده هر نوع داده ای مانند int، String یا هر شیء کلاسی است): مجموعه جاوا به عنوان یک رابط - 1
  • boolean add(T item): اگر مورد با موفقیت به مجموعه اضافه شده باشد true و اگر مورد قبلاً در مجموعه بوده باشد false را برمی گرداند.
  • boolean remove(T item): اگر مورد با موفقیت از مجموعه حذف شده باشد true و در غیر این صورت false (اگر مورد در مجموعه نبود) را برمی گرداند.
  • boolean contains(T item): اگر مورد در مجموعه باشد true و در غیر این صورت false برمی گرداند.
  • boolean isEmpty(): اگر مجموعه خالی باشد true و در غیر این صورت false برمی گرداند.
مجموعه ها در جاوا دارای امضاهای تابع کاملاً خود توضیحی هستند (همانطور که باید). اگر دو مورد یکسان را به یک مجموعه اضافه کنید، تنها اولین مورد اضافه شده در مجموعه خواهد بود. تمام تلاش‌های بعدی برای افزودن همان مورد نادیده گرفته می‌شود، مگر اینکه ابتدا مورد حذف شود. یکی از متداول ترین عملیات مجموعه، بررسی اینکه آیا یک آیتم در یک مجموعه معین قرار دارد یا خیر است. این contains()تابع زمان اجرا بسیار خوبی را برای این کار ارائه می دهد: پیچیدگی زمانی O(1) یا O(log n) بسته به اینکه پیاده سازی مورد استفاده به ترتیب a HashSetیا a باشد TreeSet. بنابراین یک مجموعه برای چه چیزی ممکن است استفاده شود؟ خوب، اگر زمانی نیاز به پیگیری بسیاری از اشیاء متمایز دارید - مانند شناسه‌ها، نام‌ها، یا سایر شناسه‌های منحصربه‌فرد - و مکرراً بررسی می‌کنید که آیا یک مورد در چنین مجموعه‌ای وجود دارد یا خیر، یک مجموعه احتمالاً انتخاب خوبی است. در اینجا یک مثال استفاده از یک مجموعه آورده شده است: تصور کنید که فهرستی از اشیاء دارید که Studentهمه دانش‌آموزان یک کلاس را نشان می‌دهند. هر کدام Studentممکن است یک نام (رشته) و درجه (int) منحصر به فرد برای این کلاس داشته باشند. اگر می‌خواهید به طور مکرر به فهرستی از همه دانش‌آموزان A (نمره >=90) ارجاع دهید، خسته‌کننده خواهد بود که این فهرست را مرور کنید و هر بار نمره هر دانش‌آموز را بررسی کنید. درعوض، می‌توانید HashSetاز رشته‌ای استفاده کنید که تمام دانش‌آموزان A را در کلاس ردیابی می‌کند، به این ترتیب:
  • هر بار که نمرات دانش آموزان به روز می شود، می توانید به سادگی بررسی کنید که آیا نمره جدید دانش آموز بزرگتر یا مساوی 90 است یا خیر.
    • اگر چنین است، آنها را به مجموعه دانش آموزان A اضافه کنیدadd()
      • اگر آنها قبلاً دانش آموز A بودند، این عملیات به سادگی نادیده گرفته می شود.
    • اگر نه، آن‌ها را از مجموعه دانش‌آموزان A حذف کنیدremove()
      • اگر در این مرحله دانش آموز A نبودند، این عملیات به سادگی نادیده گرفته می شود.
با چنین سیستمی، شما همیشه مجموعه ای به روز از همه دانش آموزان 'A' در کلاس خود خواهید داشت. اگر می‌خواهید بررسی کنید که آیا جانی اپلسید در کلاس شما خوب عمل می‌کند یا خیر، می‌توانید به راحتی این کار را با تماس contains(“Johnny Appleseed”)با مجموعه انجام دهید. البته این فقط یک نمونه از یک مورد استفاده برای یک مجموعه است و این مشکل خاص ردیابی دانش آموزان A را می توان از راه های دیگری حل کرد.

پیاده سازی ها: HashSet در جاوا و جاوا TreeSet مثال

هر دو HashSetin Java و TreeSetin Java در java.utils package. شما می توانید آنها را به این صورت وارد کنید:

// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
یا

import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
تفاوت اصلی بین جاوا HashSetو جاوا TreeSetاین است که TreeSetمرتب شده است، در حالی که اینطور HashSetنیست. به همین دلیل است که TreeSetپیچیدگی زمانی O(log n) برای عملیات کلیدی دارد، در حالی که HashSetپیچیدگی زمانی O(1) یا ثابت دارد. باید TreeSetهمیشه نظم را حفظ کند. علاوه بر عملیات مجموعه کلیدی که قبلاً ذکر شد، هر دو HashSetو TreeSetدر جاوا چند عملکرد مفید دیگر نیز دارند:
  • void clear(): مجموعه را از همه اشیا پاک می کند.
  • int size(): تعداد اشیاء موجود در مجموعه را برمی گرداند.
  • Object clone(): یک کپی کم عمق از مجموعه را برمی گرداند.
  • Iterator iterator(): یک تکرار کننده را به مجموعه برمی گرداند که از اولین شی شروع می شود.
می‌توانید کاربردهایی برای این توابع در مثال «فهرست دانش‌آموزان A» پیدا کنید: size()اگر می‌خواهید ببینید چند دانش‌آموز A دارید یا clear()می‌خواهید فهرست را در پایان ترم پاک کنید، می‌توانید تماس بگیرید. می‌توانید clone()برای ایجاد و نگه‌داشتن یک کلون از فهرست دانش‌آموزان A در یک مقطع زمانی خاص، مانند گزارش‌های میان‌ترم (به این ترتیب، کلون همراه با نسخه اصلی به‌روز نمی‌ماند).

نمونه هش ست جاوا

در اینجا یک مثال کوتاه از a HashSetاز Strings استفاده شده در جاوا آورده شده است:

import java.util.HashSet;
class HashSetDemo {
    public static void main(String[] args)
    {
	  // create a HashSet of Strings
        HashSet<String> hs = new HashSet<String>();
  
        // Add elements using the add() method
        hs.add("Collin");
	  hs.add("Bob");
 	  hs.add("Abigail");
  
        // Duplicates will ignored; this statement is useless
        hs.add("Collin");
  
        
        System.out.println(hs);
	  System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + hs.contains("Max"));


    }
}
خروجی: --------

[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false

مثال Java TreeSet

مثال مجموعه جاوا می تواند به شما در درک نظریه کمک کند. در اینجا مثال کوتاهی از استفاده از a TreeSetاز s در جاوا آمده است:String

import java.util.TreeSet;
class TreeSetDemo {
    public static void main(String[] args)
    {
	  // create a TreeSet of Strings
        TreeSet<String> ts = new TreeSet<String>();
  
        // Add elements using the add() method.
        ts.add("Collin");
	  ts.add("Bob");
 	  ts.add("Abigail");
  
        // Duplicates will ignored; this statement is useless
        ts.add("Collin");
  
        // printing the set prints the names in alphabetical order!
        System.out.println(ts); 
	  
	  System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
  System.out.println("Size of the set: " + ts.size());
 	  ts.clear();
	  System.out.println("Size of the set after clear(): " + ts.size());
        

    }
}
خروجی: -------

[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
همین! امیدوارم این کمک کرده باشد 😊
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION