JavaRush /จาวาบล็อก /Random-TH /วิธีการเปรียบเทียบ

วิธีการเปรียบเทียบ

เผยแพร่ในกลุ่ม
ในการจัดระเบียบวัตถุประเภทเดียวกันที่เก็บไว้ในอาร์เรย์หรือคอลเลกชัน นักพัฒนา Java ได้สร้างComparable. ประกาศเพียงวิธีเดียวcompareTo:
public interface Comparable<T> {
    public int compareTo(T o);
}
วิธีการเปรียบเทียบ - 1อินเทอร์เฟซComparableจะถูกกำหนดพารามิเตอร์ตามประเภทของออบเจ็กต์ที่ยอมรับเป็นพารามิเตอร์ของcompareToเมธอด ในกรณีนี้ เราเตือนคอมไพลเลอร์ว่าเราจะเปรียบเทียบวัตถุประเภทใด หากไม่ตรงตามเงื่อนไขการระบุประเภท เราจะได้รับข้อผิดClassCastExceptionพลาด วิธีการcompareToใน Java เปรียบเทียบวัตถุที่เรียกกับวัตถุที่ส่งผ่านเป็นพารามิเตอร์และส่งกลับจำนวนเต็มเป็นผลมาจากการเปรียบเทียบ:
  • ค่าบวกถ้าวัตถุที่เรียกมีขนาดใหญ่กว่าวัตถุที่ส่งผ่านเป็นพารามิเตอร์
  • เป็นค่าลบหากวัตถุที่เรียกมีขนาดเล็กกว่าวัตถุที่ส่งผ่านเป็นพารามิเตอร์
  • จะเป็นโมฆะหากวัตถุเท่ากัน
การเขียนตรรกะการเปรียบเทียบวัตถุเป็นข้อกังวลของผู้พัฒนาคลาสเพียงอย่างเดียวและถูกกำหนดโดยผลลัพธ์ที่ต้องการในการสั่งซื้อ

เหตุใดจึงจำเป็นต้องใช้วิธี CompareTo ใน Java

โปรแกรมเมอร์ Java มักจะต้องจัดการกับอาร์เรย์และรายการของวัตถุ เมื่อทำงานกับข้อมูลจำนวนมาก มักจะสะดวกในการจัดเก็บข้อมูลในรูปแบบที่จัดระเบียบหรือเรียงลำดับ ประการแรก การทำงานกับคอลเลกชันจะเร็วขึ้นเมื่อค้นหาข้อมูลที่จำเป็น และประการที่สอง ข้อมูลที่จัดระเบียบจะมองเห็นได้ดีขึ้น
วิธีเปรียบเทียบถึง - 2
หนึ่งในวิธีที่ง่ายและมีประสิทธิภาพมากที่สุดในการจัดเรียงอาร์เรย์ของsort()ออบเจ็กต์ คือวิธี Arraysการเรียน และการรวบรวมวัตถุในรูปแบบของรายการก็เป็นวิธีการเรียนที่คล้ายCollectionsกัน ในการเรียงลำดับโดยใช้วิธีการเหล่านี้ นักพัฒนา Java ให้อิสระแก่เราในการเลือกวิธีระบุเกณฑ์การเรียงลำดับ: โดยการใช้อินเทอร์เฟซComparableในคลาสของออบเจ็กต์ที่เราต้องการเรียงลำดับ หรือโดยใช้ไฟล์Comparator. ในกรณีแรก วิธีการเรียงลำดับจะยอมรับชุดของวัตถุในรูปแบบของอาร์เรย์หรือรายการ:
sort(T[]array)//sorting массива
sort(List<T> list)// sorting списка
และในวินาที - บวกกับการใช้งานอินเทอร์เฟซอื่นComparator:
sort(T[]array, Comparator <? super T> comparator)//sorting массива
sort(List<T> list, Comparator <? super T> comparator)// sorting списка
อินเทอร์เฟซComparableถูกใช้เมื่อเราต้องการตั้งค่าลำดับของวัตถุที่เป็นธรรมชาติ (สมเหตุสมผลที่สุดจากมุมมองของเรา) เมื่อทำการเรียงลำดับ นอกจากนี้ยังเป็นวิธีการ "ฮาร์ดไวร์" อัลกอริธึมสำหรับการเปรียบเทียบออบเจ็กต์ของคลาสนี้ในขั้นตอนการออกแบบ ตัวอย่างเช่น การใช้อินเทอร์เฟซนี้จะมีการกำหนดเกณฑ์สำหรับการเรียงลำดับตามธรรมชาติในคลาส wrapper ของประเภทดั้งเดิมหลัก: , , Byte, Character, Long, Integer, Short, Double, Float, นอกจากนี้ยังหมายความว่าคลาสเหล่านี้มีวิธีการนำไปใช้ซึ่งเราสามารถใช้ในโปรแกรมได้หากจำเป็น ลองดูตัวอย่างการเปรียบเทียบสตริงเพื่อดูว่าวิธีนี้ถูกนำมาใช้ในชั้นเรียนอย่างไร BooleanStringcompareToString
String str1="Аарон";
        String str2="АAPOH";
        String str3="аарон";
        String str4="ААрон";
        String str5="аАрон";
        String str6="Берта";
        String str7="берта";
String[] allStr=new String[]{str1,str2,str3,str4, str5,str6, str7};
        Arrays.sort(allStr);
        for (String s:allStr){
            System.out.println(s);
        }
    }
หากเรารันโค้ดนี้ด้วย method mainเราจะได้ผลลัพธ์ดังนี้:
АAPOH
ААрон
Аарон
Берта
аАрон
аарон
берта
ดังที่คุณเห็นในตัวอย่างในคลาสStringวิธีcompareToการจัดเรียงสตริงตามตัวอักษร พจนานุกรม และคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ มันเป็นลำดับของการเปรียบเทียบสตริงที่กำหนดโดยนักพัฒนาของคลาสStringตามธรรมชาติ เพื่อให้เข้าใจได้ง่ายขึ้นว่าลำดับพจนานุกรมคืออะไร ก็เพียงพอแล้วที่จะจำได้ว่าจัดเรียงคำศัพท์ในพจนานุกรมภาษาอย่างไร เมื่อเปรียบเทียบตัวเลขวัตถุจะเรียงลำดับจากน้อยไปหามาก ตรรกะการเปรียบเทียบ นี้ ฝังอยู่ในคลาสByte, Character, Long, Integer, Shor, Double,Float

ลองใช้การเปรียบเทียบในชั้นเรียนของเรา

มาดูตัวอย่างวิธีที่คุณสามารถสร้างความสามารถในการเปรียบเทียบวัตถุในชั้นเรียนของคุณกัน เมื่อนำcomparetoเมธอด Java ไปใช้ เราสามารถระบุเกณฑ์ตั้งแต่หนึ่งเกณฑ์ขึ้นไปสำหรับการสั่งซื้ออ็อบเจ็กต์ และยังใช้เมธอดcomparetoจาก คลาส StringและIntegerได้ ตัวอย่างเช่น สำหรับคลาสอ็อบเจ็กต์Userเราตั้งค่าการเรียงลำดับตามชื่อ และในกรณีที่ชื่อเท่ากัน ก็กำหนดตามอายุ วัตถุจะถูกจัดเรียงตามลำดับธรรมชาติ (เมื่อค่าเพิ่มขึ้น) ระดับUser:
public class User  implements Comparable <User>{//добавляем возможность сравнивать an objectы User

    private String name;
    private Integer age;
    private String email;

    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    @Override
//реализуем метод compareTo интерфейса Comparable
    public int compareTo(User o) {

//используем метод compareTo из класса String для сравнения имен
        int result = this.name.compareTo(o.name);

//если имена одинаковые -  сравниваем возраст,
используя метод compareTo из класса Integer

        if (result == 0) {
            result = this.age.compareTo(o.age);
        }
        return result;
    }

    @Override
    public String toString() {
        return "{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
มาทดสอบการทำงานของวิธีการcompareToที่นำมาใช้ในชั้นเรียนUserโดยใช้ วิธี sortการเรียนCollections:
public static void main(String[] args) {
    User user = new User("Andrey", 19, "andryha@mail.ru");
    User user2 = new User("Олег", 25, "oleg@mail.ru");
    User user3 = new User("Andrey", 24,"opr@google.com");
    User user4 = new User("Igor", 16, "igor@mail.ru");
    User user5 = new User("Andrey", 44,"stary@google.com");
    List<User> list = new ArrayList<>();

    list.add(user);
    list.add(user2);
    list.add(user3);
    list.add(user4);
    list.add(user5);

    System.out.println("-------до сортировки--------");
    for (User u : list) {
        System.out.println(u);
    }
    System.out.println("-------после сортировки-----");
    Collections.sort(list);
    for (User u : list) {
        System.out.println(u);
    }
}
 }
}
ผลลัพธ์ของวิธีการmain:
-------до сортировки--------
{name='Андрей',  age=19,  email='andryha@mail.ru'}
{name='Олег',    age=25,  email='oleg@mail.ru'}
{name='Андрей',  age=24,  email='opr@google.com'}
{name='Игорь',   age=16,  email='igor@mail.ru'}
{name='Андрей',  age=44,  email='stary@google.com'}
-------после сортировки-----
{name='Андрей',  age=19,  email='andryha@mail.ru'}
{name='Андрей',  age=24,  email='opr@google.com'}
{name='Андрей',  age=44,  email='stary@google.com'}
{name='Игорь',   age=16,  email='igor@mail.ru'}
{name='Олег',    age=25,  email='oleg@mail.ru'}
เอาล่ะ เรามาสรุปกัน หากคุณเป็นผู้สนับสนุนความสงบเรียบร้อยในทุกสิ่ง และต้องการจัดเรียงอ็อบเจ็กต์ของคุณในอาร์เรย์หรือรายการโดยไม่มีโค้ดที่ไม่จำเป็น ให้ใช้อินเทอร์เฟComparableซ การใช้เมธอด comparisonTo ทำให้ง่ายต่อการสร้างกลไกสำหรับการเรียงลำดับอ็อบเจ็กต์ตามธรรมชาติในชั้นเรียนของคุณ หากคุณต้องทำงานกับคอลเลกชันและอาร์เรย์ของอ็อบเจ็กต์ของคลาสมาตรฐานที่อธิบายไว้ในไลบรารี Java ให้ใช้การใช้งานสำเร็จรูปcompareToในคลาสเหล่านี้
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION