---
# System prepended metadata

title: 對象<SUP>(物件)</SUP>的排序
tags: [java]

---

# 對象<SUP>(物件)</SUP>的排序

###### tags: `java`

[TOC]

---

|              | `Comparable`                 | `Comparator`           |
| ------------ | ---------------------------- | ---------------------- |
| 進行排序比較 | 某特定條件為默認自然排序條件 | 可分別針對多個不同條件 |
| 實作方式     | 於欲被排序的 class           | 於獨立的 class         |
| `@Override`  | `compareTo()`                | `compare()`            |

## Implementing [`Comparable<T>`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Comparable.html) Interface

the value 0 if the argument Date is equal to this Date; a value less than 0 if this Date is before the Date argument; and a value greater than 0 if this Date is after the Date argument.

**實作**並 **`@Override`**：

```java
public class Example implements Comparable<Example> {

	private Date createdAt;

	private Date changedAt;

	@Override
	public int compareTo(ComparableImpl other) {
		return createdAt.compareTo(
			other.createdAt
		);
	}
}
```

進行排序：

```java
		List<Example> examples = new ArrayList<>();
		// populating omitted for brevity

		Collections.sort(examples);
```

## Implementing [`Comparator<T>`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Comparator.html) Interface

**實作**並 **`@Override`**：

```java
public class ExampleCreatedComparator implements Comparator<Example> {

	// other boilerplate codes omitted for brevity

	@Override
	public int compare(Example first, Example second) {
		return Long.compare(
			first.getCreatedAt().getTime(),
			second.getCreatedAt().getTime()
		);
	}
}
```

```java
public class ExampleChangedComparator implements Comparable<Example> {

	// other boilerplate codes omitted for brevity

	@Override
	public int compare(Example first, Example second) {
		return Long.compare(
			first.getChangedAt().getTime(),
			second.getChangedAt().getTime()
		);
	}
}
```

進行排序：

```java
		Collections.sort(
			examples,
			new ExampleCreatedComparator()
		);
```

```java
		Collections.sort(
			examples,
			new ExampleChangedComparator()
		);
```
