Java 比较器与可比

📅 2026/7/15 14:53:48
Java 比较器与可比
嗨!今天我们要谈谈比较物体。嗯......但我们不是已经不止一次讨论过这个话题了吗?:/ 我们知道算子的工作原理,以及和的方法。 比较则有些不同。之前,我们很可能指的是“检查物体是否相等”。但比较物体的原因可能完全不同!其中最明显的是排序。 我觉得如果有人让你对数字或字符串进行排序,你应该能顺利完成:控制台输出:如果你还记得这个类和方法,那就太棒了!我觉得你在数字方面也不会有问题。 这里有个更具挑战性的任务:这项任务其实很简单。我们有一个类和3个Car对象。 请帮我整理一下车的名单。 你可能会问:“它们应该如何分类?”用名字?按制造年份划分?按最高速度? 非常好的问题。目前,我们不知道如何分类这些物品。 而且,很自然地,Java 也不知道这一点!当我们尝试将一个对象列表传递给方法时,会出现错误:而且,语言怎么会知道如何排序你写的类的对象呢? 这取决于你的项目需要做什么。 我们必须以某种方式教Java比较这些对象。并且按照我们想要的方式进行比较。 Java 确实有一个特殊的机制:接口。==equals()hashCode()ArrayListimport java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { String name1 = "Masha"; String name2 = "Sasha"; String name3 = "Dasha"; ListString names = new ArrayList(); names.add(name1); names.add(name2); names.add(name3); Collections.sort(names); System.out.println(names); } }[Dasha, Masha, Sasha]Collectionssort()public class Car { private int manufactureYear; private String model; private int maxSpeed; public Car(int manufactureYear, String model, int maxSpeed) { this.manufactureYear = manufactureYear; this.model = model; this.maxSpeed = maxSpeed; } // ...getters, setters, toString() } import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { ListCar cars = new ArrayList(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(2012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); } }CarCarCarCollections.sort()import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { ListCar cars = new ArrayList(); Car ferrari = new Car(1990, "Ferrari 360 Spider", 310); Car lambo = new Car(20012, "Lamborghini Gallardo", 290); Car bugatti = new Car(2010, "Bugatti Veyron", 350); cars.add(ferrari); cars.add(bugatti); cars.add(lambo); // Compilation error! Collections.sort(cars); } }Comparable