在 Java 里,Comparator 本身只是一个函数式接口,用来定义“比较规则”,它不存在“扩容”这个概念。你可能是把 Comparator 和 List / Map / 数组 / PriorityQueue 这些会用 Comparator 的容器搞混了。
下面分几种常见情况说明:
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
✅ 它只是一个比较器对象
❌ 没有容量、没有长度、不能扩容
例如:
Comparator<Integer> c = (a, b) -> a - b;
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.sort(Comparator.naturalOrder());
✅ 扩容的是 ArrayList,不是 Comparator
ArrayList 默认容量 10PriorityQueue<Integer> pq =
new PriorityQueue<>(Comparator.reverseOrder());
✅ 扩容的是 PriorityQueue
TreeMap<Integer, String> map =
new TreeMap<>(Comparator.reverseOrder());
✅ 红黑树结构,不需要“扩容”
用 thenComparing:
Comparator<Student> c = Comparator
.comparing(Student::getScore)
.thenComparing(Student::getName);
Comparator<Student> dynamic;
if (type == 1) {
dynamic = Comparator.comparing(Student::getScore);
} else {
dynamic = Comparator.comparing(Student::getAge);
}
ArrayList → 自动扩容PriorityQueue → 自动扩容TreeMap/TreeSet → 无需扩容Comparator 不会扩容,它只是“比较规则”;
会扩容的是使用 Comparator 的集合(如 List、Queue)。
如果你能补充:
我可以给你更精确的解答。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。