☰ 总览更新 10-13 10:24

14 · Set 和 TreeSet(compareTo 谁调的)

我的原话

三种集合

像什么 怎么取
ArrayList 排队,有 0、1、2 号 get(0)
HashMap 柜子 get("钥匙")
HashSet 袋子,同样的只放得进一个 只能问 contains
names.add("张三"); names.add("李四"); names.add("张三");
names.size() → 2

题:add a b a c b → size 3 ✅

compareTo 谁调的?= 跟 plugIn 一模一样(12-接口)

plugIn(鼠标)    → 跳进 plugIn → 里面调 鼠标.connect()
set.add(张三)   → 跳进 add    → 里面调 张三.compareTo(...)

add 是 Java 的人写好的,看不见里面,所以以为"没调用"。 - implements Comparable<Student> = 签了 Java 自带的合同 Comparable,合同里只有一条:必须会 compareTo - 题:TreeSet 的 add 只收签了哪份合同的?→ 答「compareTo 的」✅(合同名叫 Comparable)

真跑过(t14/T28):在 compareTo 里加一行打印

add 张三 → compareTo 被调用了:张三 和 张三 比   ← 只有一个也比:跟自己比,只为检查"能不能比"
add 李四 → compareTo 被调用了:李四 和 张三 比
add 王五 → compareTo 被调用了:王五 和 张三 比
排出来:李四 18 / 张三 20 / 王五 25

return this.age - o.age:负数=我排前,正数=我排后,0=当成同一个(Set 不收重复)

没签合同会怎样(t14b/T29)

ClassCastException: class Student cannot be cast to class java.lang.Comparable
    at java.util.TreeMap.compare(...)   ← 证据:add 里面真的在比