我的目标是对名单上的人进行排序。我使用比较器接口的比较方法。
我已经创建了三个类。即
Person.java, AgeComparator.java, SortingExample.java
Person类是一个简单的类,包含两个字段(name、age),也包含getters。然后,在我的AgeComaparator类中,我实现了比较器接口,并将Person类作为类型参数传递。
package com.nadee.module3;
import java.util.Objects;
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
Objects.requireNonNull(name);
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
ageComparator.java
package com.nadee.module3;
import java.util.Comparator;
public class AgeComparator implements Comparator<Person>{
@Override
public int compare(Person left, Person right) {
return Integer.compare(left.getAge(), right.getAge());
}
}
排序Example.java
package com.nadee.module3;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.nadee.collections.Person;
public class SortingExample {
public static void main(String[] args) {
Person p1 = new Person("will smith", 45);
Person p2 = new Person("john snow", 33);
Person p3 = new Person("johny depth", 55);
List<Person> actors = new ArrayList<Person>();
actors.add(p1);
actors.add(p2);
actors.add(p3);
System.out.println(actors);
Collections.sort(actors, new AgeComparator());
System.out.println(actors);
}
}
我将Eclipse IDE用于此应用程序,在
sort
类Person位于com.nadee.module3,类AgeComparator用于此类Person
但是在类排序示例中,您使用了com.nadee.collections.Person中的Person。应该完全不行。您的代码的另一个要点:
actors.sort(new AgeComparator());
,集合sort
太常见我有字符串的比较器,它被转换成日期。当我将这个比较器传递给集合时。sort()方法我得到了java。lang.IllegalArgumentException:比较法违反其总合同!。 我读过一些关于这个例外的文章,但我真的不明白为什么会出现这个例外。知道吗?
问题内容: 这个问题应该比关于更多。 我有一个子类(在python 2.7中,numpy 1.6.2),并且我发现在对象时未列出的字段名称(因此,ipython的自动完成功能无效)。 为了修复它,我尝试在子类中重写,如下所示: 结果是:。(我发现这里实际上应该在python 3.3中工作…) 作为一种解决方法,我尝试了: 据我所知,这是可行的,但当然并不优雅。 问题: 后一种解决方案对我而言是否正
问题内容: 我正在编写一个程序,该程序将协调实时数据库中的最终交易。我正在进行的工作无法作为set操作完成,因此我使用了两个嵌套游标。 我在对每个客户端进行协调时需要对事务表进行排它锁,但是我想释放该锁,并让其他人在我处理的每个客户端之间运行查询。 我想在行级别而不是表级别上执行排他锁,但是到目前为止,我读到的内容说如果其他事务在隔离级别上运行(这对我来说),我将无法执行。 我是否正确获取了表级互
所以我有一个Java应用程序,它使用一个固定的线程池来执行一些代码。此代码包括使用输出到系统的第三方库。犯错误当我让这段代码执行单线程时,我“重定向”了系统。错误为最终打印到log4j日志的打印流。基本上是这样的: 这按预期工作。输出打印到日志文件而不是控制台,我可以通过更改log4j配置完全删除输出。完美。 当我开始添加多线程时,我做了一些研究,遇到了这样一个问题:在多线程Java程序中,每个线
重载子类中重写的方法,我是重载父方法还是重载子类方法? 我大体上理解什么是超载和超驰。 重载-同一方法在同一个类中有不同的参数和可能的返回类型。 重写-子类中的方法签名与父类中的方法签名相同,但实现不同。 方法B.a(INTX)是重载a.a还是重载B.a?
问题内容: 我正在从python控制台进行调试,并且每次更改时都想重新加载模块,因此不必退出控制台并重新输入。我正在做: 但我收到: 重新加载整个用户类的正确方法是什么?有没有更好的方法可以做到这一点,也许可以在调试时自动更新? 谢谢。 问题答案: 根据要求,您能做的最好的就是 如果直接使用用户模块而不是直接使用用户模块,那将更好,更清洁(这几乎永远不是正确的方法)。那就是 这会做您想要的。但是,