برنامه نویسی

مرتب سازی هوشمندها در جاوا: قابل مقایسه و مقایسه

Summarize this content to 400 words in Persian Lang
مرتب سازی یک عملیات اساسی در جاوا است، مخصوصاً وقتی که با مجموعه ها سر و کار داریم. جاوا دو استراتژی اصلی برای مرتب سازی ارائه می دهد: سفارش طبیعی با استفاده از Comparable و سفارش سفارشی با استفاده از Comparator.

برای موارد استفاده پیشرفته، مجموعه هایی مانند TreeSet و TreeMap از این استراتژی ها برای حفظ نظم مرتب شده به صورت پویا استفاده کنید. در پست بعدی به طور کامل به این موضوع پرداخته خواهد شد.

نظم طبیعی: رابط قابل مقایسه

Comparable پیش فرض یا را ارائه می دهد سفارش طبیعی از اشیاء یک کلاس این رابط را پیاده سازی می کند و آن را لغو می کند compareTo() روشی برای تعریف نحوه مقایسه اشیاء آن کلاس.

ویژگی های کلیدی قابل مقایسه:

نوع رابط: یک رابط کاربردی نیست (با لامبدا قابل استفاده نیست).

معیار مرتب سازی: منطق مرتب‌سازی واحد و منسجم.

استفاده: برای اشیاء با a طبیعی مقایسه، مانند اعداد صحیح، رشته ها یا شناسه ها.

مثال: مرتب سازی بر اساس شناسه

// Implementing Comparable Interface
class Product implements Comparable<Product> {
private int id;
private double price;
private String category;

public Product(int id, double price, String category) {
this.id = id;
this.price = price;
this.category = category;
}

// Overriding compareTo() method
@Override
public int compareTo(Product o) {
return Integer.compare(this.id, o.id); // Natural ordering by id
}

@Override
public String toString() {
return “Product [id=” + id + “, price=” + price + “, category=” +
category + “]”;
}

// Getters
public int getId() {
return id;
}

public double getPrice() {
return price;
}

public String getCategory() {
return category;
}
}

public class ProductSortingExample {
public static void main(String[] args) {
List<Product> productList = new ArrayList<>();
productList.add(new Product(3, 200.0, “Non-Essentials”));
productList.add(new Product(1, 100.0, “Essentials”));
productList.add(new Product(2, 150.0, “Essentials”));

// Sorting using Comparable
Collections.sort(productList);

System.out.println(“List Sorted with Comparable -> Natural Ordering”);
list.forEach(System.out::println);

}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی

List Sorted with Comparable -> Natural Ordering
Product [id=1, price=100.0, category=Essentials] Product [id=2, price=150.0, category=Essentials] Product [id=3, price=200.0, category=Non-Essentials]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح کد

تعریف نظم طبیعی:این compareTo روش مقایسه می کند id زمینه های Product اشیاء این فراهم می کند سفارش طبیعی برای مرتب سازی
مرتب سازی طبیعی:این Collections.sort(productList) روش مرتب می کند productList بر اساس نظم طبیعی ارائه شده توسط compareTo روش پس از مرتب سازی، Product اجسام به ترتیب صعودی مرتب شده اند id.
مجموعه های درختی:این رفتار مرتب‌سازی هنگام کار با مجموعه‌هایی مانند TreeSet،TreeMap و دیگران این مجموعه ها به طور خودکار عناصر را به ترتیب مرتب شده بر اساس حفظ می کنند Comparable پیاده سازی، و ما این را در پست بعدی نشان خواهیم داد.

سفارش سفارشی: رابط مقایسه

Comparator به شما اجازه تعریف می دهد معیارهای مرتب سازی سفارشیمستقل از نظم طبیعی. این یک رابط کاربردی است، بنابراین می توان آن را با استفاده از لامبدا یا مراجع روش پیاده سازی کرد.

ویژگی های کلیدی مقایسه کننده:

نوع رابط: رابط کاربردی (قابل استفاده با لامبدا).

معیار مرتب سازی: انعطاف پذیر، از چندین معیار سفارشی پشتیبانی می کند.

استفاده: ایده آل برای مرتب سازی بر اساس ویژگی های غیر از ترتیب طبیعی یا برای مرتب سازی چند سطحی.

مثال: مرتب سازی بر اساس category و price

public class NaturalVsCustomOrdering {

public static void main(String[] args) {
// Initializing List of Products
List<Product> list = new ArrayList<>(Arrays.asList(
new Product(1, 100.0, “Essentials”),
new Product(2, 500.0, “Essentials”),
new Product(3, 200.0, “Non-Essentials”),
new Product(4, 400.0, “Non-Essentials”),
new Product(5, 300.0, “Essentials”)
));

// Defining the Custom Comparator
Comparator<Product> customComparator = (p1, p2) -> {
// Comparing on the basis of category
int categoryComparison = p1.getCategory()
.compareTo(p2.getCategory());

// Comparing on the basis of price when categories are same
return categoryComparison != 0
? categoryComparison
: Double.compare(p1.getPrice(), p2.getPrice());
};

// Sorting the List using the Comparator
Collections.sort(list, customComparator);

System.out.println(“List Sorted with Comparator -> Custom Ordering”);
list.forEach(System.out::println);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی

List Sorted with Comparator -> Custom Ordering
Product [id=1, price=100.0, category=Essentials] Product [id=5, price=300.0, category=Essentials] Product [id=2, price=500.0, category=Essentials] Product [id=3, price=200.0, category=Non-Essentials] Product [id=4, price=400.0, category=Non-Essentials]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح کد

تعریف سفارش سفارشی:مقایسه کننده سفارشی، را مقایسه می کند category زمینه های Product اشیاء اگر دو محصول یکسان باشند category، مقایسه کننده سپس مقدار را با هم مقایسه می کند price فیلدها برای مرتب سازی بر اساس قیمت در هر دسته. این رویکرد به ما اجازه می دهد تا یک ترتیب مرتب سازی را تعریف کنیم که کاملاً طبیعی نیست اما بر اساس معیارهای خاص است.
مرتب سازی با Collections.sort:این Collections.sort(list, comparator) متد از مقایسه کننده سفارشی برای مرتب کردن لیست استفاده می کند. این روش ابتدا محصولات را توسط خود سفارش می دهد category. اگر محصولات متعلق به یک دسته باشند، بر اساس آن دسته بندی می شوند price به ترتیب صعودی
مجموعه های مبتنی بر درخت:این رویکرد سفارشی سفارشی برای مجموعه هایی مانند TreeSet و TreeMap، که از یک مقایسه کننده برای حفظ ترتیب مرتب شده عناصر خود استفاده می کنند. نحوه کار این مجموعه ها با مرتب سازی سفارشی را در پست بعدی نشان خواهیم داد.

مقایسه مقایسه کننده و مقایسه کننده

ویژگی
Comparable
Comparator

هدف
نظم طبیعی را تعریف می کند.
اجازه سفارش سفارشی را می دهد.

پیاده سازی
را اجرا کنید Comparable رابط کاربری
استفاده کنید Comparator رابط کاربری

رابط عملکردی
نه، نمی توان از لامبدا استفاده کرد.
بله، می توان از لامبدا استفاده کرد.

انعطاف پذیری
معیار مرتب سازی واحد
معیارهای مرتب سازی چندگانه

تعریف در کلاس
در خود کلاس پیاده سازی شده است.
به عنوان یک کلاس خارجی یا لامبدا اجرا می شود.

خوراکی های کلیدی

استفاده کنید Comparable برای سفارش طبیعی:بهترین گزینه برای اشیاء با منطق مرتب‌سازی منفرد و ثابت.
استفاده کنید Comparator برای سفارش سفارشی:ایده آل برای معیارهای مرتب سازی انعطاف پذیر یا چند سطحی.
ابزار مناسب را انتخاب کنید:

با درک تفاوت بین این رابط ها، می توانید رویکرد مناسبی را برای مرتب سازی موثر اشیاء خود در جاوا انتخاب کنید!

پست های مرتبط

کد نویسی مبارک!

مرتب سازی یک عملیات اساسی در جاوا است، مخصوصاً وقتی که با مجموعه ها سر و کار داریم. جاوا دو استراتژی اصلی برای مرتب سازی ارائه می دهد: سفارش طبیعی با استفاده از Comparable و سفارش سفارشی با استفاده از Comparator.

برای موارد استفاده پیشرفته، مجموعه هایی مانند TreeSet و TreeMap از این استراتژی ها برای حفظ نظم مرتب شده به صورت پویا استفاده کنید. در پست بعدی به طور کامل به این موضوع پرداخته خواهد شد.


نظم طبیعی: رابط قابل مقایسه

Comparable پیش فرض یا را ارائه می دهد سفارش طبیعی از اشیاء یک کلاس این رابط را پیاده سازی می کند و آن را لغو می کند compareTo() روشی برای تعریف نحوه مقایسه اشیاء آن کلاس.

ویژگی های کلیدی قابل مقایسه:

  • نوع رابط: یک رابط کاربردی نیست (با لامبدا قابل استفاده نیست).
  • معیار مرتب سازی: منطق مرتب‌سازی واحد و منسجم.
  • استفاده: برای اشیاء با a طبیعی مقایسه، مانند اعداد صحیح، رشته ها یا شناسه ها.

مثال: مرتب سازی بر اساس شناسه

// Implementing Comparable Interface
class Product implements Comparable<Product> {
    private int id;
    private double price;
    private String category;

    public Product(int id, double price, String category) {
        this.id = id;
        this.price = price;
        this.category = category;
    }

    // Overriding compareTo() method
    @Override
    public int compareTo(Product o) {
        return Integer.compare(this.id, o.id); // Natural ordering by id
    }

    @Override
    public String toString() {
        return "Product [id=" + id + ", price=" + price + ", category=" +
        category + "]";
    }

    // Getters
    public int getId() {
        return id;
    }

    public double getPrice() {
        return price;
    }

    public String getCategory() {
        return category;
    }
}

public class ProductSortingExample {
    public static void main(String[] args) {
        List<Product> productList = new ArrayList<>();
        productList.add(new Product(3, 200.0, "Non-Essentials"));
        productList.add(new Product(1, 100.0, "Essentials"));
        productList.add(new Product(2, 150.0, "Essentials"));

        // Sorting using Comparable
        Collections.sort(productList);

        System.out.println("List Sorted with Comparable -> Natural Ordering");
        list.forEach(System.out::println);

    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی

List Sorted with Comparable -> Natural Ordering
Product [id=1, price=100.0, category=Essentials]
Product [id=2, price=150.0, category=Essentials]
Product [id=3, price=200.0, category=Non-Essentials]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح کد

  1. تعریف نظم طبیعی:
    این compareTo روش مقایسه می کند id زمینه های Product اشیاء این فراهم می کند سفارش طبیعی برای مرتب سازی

  2. مرتب سازی طبیعی:
    این Collections.sort(productList) روش مرتب می کند productList بر اساس نظم طبیعی ارائه شده توسط compareTo روش پس از مرتب سازی، Product اجسام به ترتیب صعودی مرتب شده اند id.

  3. مجموعه های درختی:
    این رفتار مرتب‌سازی هنگام کار با مجموعه‌هایی مانند TreeSet،TreeMap و دیگران این مجموعه ها به طور خودکار عناصر را به ترتیب مرتب شده بر اساس حفظ می کنند Comparable پیاده سازی، و ما این را در پست بعدی نشان خواهیم داد.


سفارش سفارشی: رابط مقایسه

Comparator به شما اجازه تعریف می دهد معیارهای مرتب سازی سفارشیمستقل از نظم طبیعی. این یک رابط کاربردی است، بنابراین می توان آن را با استفاده از لامبدا یا مراجع روش پیاده سازی کرد.

ویژگی های کلیدی مقایسه کننده:

  • نوع رابط: رابط کاربردی (قابل استفاده با لامبدا).
  • معیار مرتب سازی: انعطاف پذیر، از چندین معیار سفارشی پشتیبانی می کند.
  • استفاده: ایده آل برای مرتب سازی بر اساس ویژگی های غیر از ترتیب طبیعی یا برای مرتب سازی چند سطحی.

مثال: مرتب سازی بر اساس category و price

public class NaturalVsCustomOrdering {

    public static void main(String[] args) {
        // Initializing List of Products
        List<Product> list = new ArrayList<>(Arrays.asList(
                new Product(1, 100.0, "Essentials"),
                new Product(2, 500.0, "Essentials"),
                new Product(3, 200.0, "Non-Essentials"),
                new Product(4, 400.0, "Non-Essentials"),
                new Product(5, 300.0, "Essentials")
        ));

        // Defining the Custom Comparator
        Comparator<Product> customComparator = (p1, p2) -> {
            // Comparing on the basis of category
            int categoryComparison = p1.getCategory()
                           .compareTo(p2.getCategory());

            // Comparing on the basis of price when categories are same
            return categoryComparison != 0 
                   ? categoryComparison 
                   : Double.compare(p1.getPrice(), p2.getPrice());
        };

        // Sorting the List using the Comparator
        Collections.sort(list, customComparator);

        System.out.println("List Sorted with Comparator -> Custom Ordering");
        list.forEach(System.out::println);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی

List Sorted with Comparator -> Custom Ordering
Product [id=1, price=100.0, category=Essentials]
Product [id=5, price=300.0, category=Essentials]
Product [id=2, price=500.0, category=Essentials]
Product [id=3, price=200.0, category=Non-Essentials]
Product [id=4, price=400.0, category=Non-Essentials]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح کد

  1. تعریف سفارش سفارشی:
    مقایسه کننده سفارشی، را مقایسه می کند category زمینه های Product اشیاء اگر دو محصول یکسان باشند category، مقایسه کننده سپس مقدار را با هم مقایسه می کند price فیلدها برای مرتب سازی بر اساس قیمت در هر دسته. این رویکرد به ما اجازه می دهد تا یک ترتیب مرتب سازی را تعریف کنیم که کاملاً طبیعی نیست اما بر اساس معیارهای خاص است.

  2. مرتب سازی با Collections.sort:
    این Collections.sort(list, comparator) متد از مقایسه کننده سفارشی برای مرتب کردن لیست استفاده می کند. این روش ابتدا محصولات را توسط خود سفارش می دهد category. اگر محصولات متعلق به یک دسته باشند، بر اساس آن دسته بندی می شوند price به ترتیب صعودی

  3. مجموعه های مبتنی بر درخت:
    این رویکرد سفارشی سفارشی برای مجموعه هایی مانند TreeSet و TreeMap، که از یک مقایسه کننده برای حفظ ترتیب مرتب شده عناصر خود استفاده می کنند. نحوه کار این مجموعه ها با مرتب سازی سفارشی را در پست بعدی نشان خواهیم داد.


مقایسه مقایسه کننده و مقایسه کننده

ویژگی Comparable Comparator
هدف نظم طبیعی را تعریف می کند. اجازه سفارش سفارشی را می دهد.
پیاده سازی را اجرا کنید Comparable رابط کاربری استفاده کنید Comparator رابط کاربری
رابط عملکردی نه، نمی توان از لامبدا استفاده کرد. بله، می توان از لامبدا استفاده کرد.
انعطاف پذیری معیار مرتب سازی واحد معیارهای مرتب سازی چندگانه
تعریف در کلاس در خود کلاس پیاده سازی شده است. به عنوان یک کلاس خارجی یا لامبدا اجرا می شود.

خوراکی های کلیدی

  1. استفاده کنید Comparable برای سفارش طبیعی:
    بهترین گزینه برای اشیاء با منطق مرتب‌سازی منفرد و ثابت.

  2. استفاده کنید Comparator برای سفارش سفارشی:
    ایده آل برای معیارهای مرتب سازی انعطاف پذیر یا چند سطحی.

  3. ابزار مناسب را انتخاب کنید:

با درک تفاوت بین این رابط ها، می توانید رویکرد مناسبی را برای مرتب سازی موثر اشیاء خود در جاوا انتخاب کنید!


پست های مرتبط

کد نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا