comparble和comparator
时间: 2023-05-04 09:01:28 浏览: 81
"comparable"和"comparator"都是关于比较的概念,但具体含义不同。"comparable"是一个接口(interface),它是用来实现对象的比较的。而"comparator"是一个类(class),它是用来定义对象的比较方式的。所以从用途上来说,"comparable"是在对象自己内部定义比较的方法,"comparator"则是在外部定义比较,然后传入要比较的对象。
相关问题
用java编写,声明实现Comparble<T>接口,提供按照账户余额比较账户大小的方法,使用Comparator<T>接口声明比较器类CompareName,按照账户名比较账户大小,编写main方法测试相应的接口实现方法。
好的,我理解了你的问题。下面是Java代码的实现:
```
import java.util.Comparator;
// 账户类实现Comparable接口
class Account implements Comparable<Account> {
private String name;
private double balance;
public Account(String name, double balance) {
this.name = name;
this.balance = balance;
}
public String getName() {
return name;
}
public double getBalance() {
return balance;
}
// 按照账户余额比较账户大小的方法
@Override
public int compareTo(Account o) {
if (this.balance > o.balance) {
return 1;
} else if (this.balance < o.balance) {
return -1;
} else {
return 0;
}
}
}
// 比较器类CompareName,按照账户名比较账户大小
class CompareName implements Comparator<Account> {
@Override
public int compare(Account o1, Account o2) {
return o1.getName().compareTo(o2.getName());
}
}
// 测试代码
public class Main {
public static void main(String[] args) {
Account account1 = new Account("Tom", 1000);
Account account2 = new Account("Jerry", 2000);
// 测试按照账户余额比较账户大小的方法
System.out.println(account1.compareTo(account2)); // -1
// 测试按照账户名比较账户大小的方法
CompareName compareName = new CompareName();
System.out.println(compareName.compare(account1, account2)); // -1
}
}
```
在这里,我们定义了一个 `Account` 类来表示账户,它实现了 `Comparable` 接口来提供按照账户余额比较账户大小的方法。然后,我们定义一个 `CompareName` 比较器类来按照账户名比较账户大小。最后,在 `Main` 类中,我们可以测试这两个方法。
在这个代码基础上声明实现Comparble<T>接口,提供按照账户余额比较账户大小的方法;同时,使用Comparator<T>接口声明比较器类CompareName,按照账户名比较账户大小;编写main方法测试相应的接口实现方法。
给定的代码基于Java语言,实现了一个简单的银行账户类。
```java
public class BankAccount {
private String name;
private double balance;
public BankAccount(String name, double balance) {
this.name = name;
this.balance = balance;
}
public String getName() {
return name;
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
} else {
System.out.println("Insufficient balance");
}
}
@Override
public String toString() {
return "BankAccount{" +
"name='" + name + '\'' +
", balance=" + balance +
'}';
}
}
```
现在我们要实现`Comparable<T>`接口,提供按照账户余额比较账户大小的方法。按照Java的约定,如果一个类实现了`Comparable<T>`接口,就应该覆写`compareTo()`方法,该方法接受一个泛型参数`T`,并返回一个整数值。如果当前对象小于参数对象,则返回负整数,如果当前对象等于参数对象,则返回0,如果当前对象大于参数对象,则返回正整数。
```java
public class BankAccount implements Comparable<BankAccount> {
// ...
@Override
public int compareTo(BankAccount other) {
if (balance < other.balance) {
return -1;
} else if (balance > other.balance) {
return 1;
} else {
return 0;
}
}
}
```
现在我们还需要使用`Comparator<T>`接口声明比较器类`CompareName`,按照账户名比较账户大小。同样地,按照Java的约定,如果一个类实现了`Comparator<T>`接口,就应该覆写`compare()`方法,该方法接受两个泛型参数`T`,并返回一个整数值。如果第一个参数小于第二个参数,则返回负整数,如果两个参数相等,则返回0,如果第一个参数大于第二个参数,则返回正整数。
```java
public class CompareName implements Comparator<BankAccount> {
@Override
public int compare(BankAccount a1, BankAccount a2) {
return a1.getName().compareTo(a2.getName());
}
}
```
最后,我们编写一个`main`方法,测试相应的接口实现方法。
```java
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
BankAccount[] accounts = {
new BankAccount("Alice", 5000),
new BankAccount("Bob", 3000),
new BankAccount("Charlie", 7000),
new BankAccount("David", 2000)
};
// 按照账户余额排序
Arrays.sort(accounts);
System.out.println(Arrays.toString(accounts));
// 按照账户名排序
Arrays.sort(accounts, new CompareName());
System.out.println(Arrays.toString(accounts));
}
}
```
阅读全文