Collection的contains方法解析

问题遇到的现象和发生背景

有点没搞懂,为啥视频里讲的是:底层调用u1.equals(u2)但是没有重写,但是我根据源码一步步传递,不是应该是u2.equals(u1)这样来比较的吗?
contain方法调用equalse方法能理解。

问题相关代码,请勿粘贴截图

package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

public class CollectionTest03 {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
//创建用户对象
User u1 = new User("Jack");
User u2 = new User("Jack");

    c.add(u1);
    System.out.println(c.contains(u2));//false User没有重写equals方法,底层调用u1.equals(u2)但是没有重写
    //重写equals方法之后返回的是true,因为比较的是内容了
}

}

class User{
private String name;
public User(){};
public User(String name) {
this.name = name;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    User user = (User) o;
    return name.equals(user.name);
}

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

谁equals谁不都是一样的结果吗