Object类有哪些方法?
1. getClass() 获取运行时类型,返回值为Class对象。
2. hashCode() 返回该对象的哈希码值。
3. equals(obj) 判断两个对象是否相等,在Object中,equals就是使用==来判断的。但是在子类中,一般重写这个方法。
4. clone() 实现对象的浅拷贝。
5. toString() 用于返回一个描述当前对象信息的String字符串,默认返回对象的类名+hashCode的16进制数字。
6. notify() 唤醒在该对象上等待的某个线程。
7. notifyAll() 唤醒在该对象上等待的所有线程。
8. wait() 调用该方法后当前线程进入等待状态,并释放它所持有的所有锁。
9. finalize() 该方法用于释放资源。
HashSet如何添加元素?
1.调用该元素的hashCode()方法获取hashCode,定位到它应该放置的位置。
2.如果这个位置上没有元素,就直接存在这个位置上
3.如果这个位置上有元素:
3.1 如果元素的哈希值不同-》放在链表后面
3.2 如果元素的哈希值相同-》调用equals方法进行比较,相同则添加失败,不同则就放在链表后面
HashCode()和equals()的关系?
1.重写equals方法的时候也必须重写hashCode方法。
2.如果两个对象equals()方法相等则它们的hashCode返回值一定要相同,如果两个对象的hashCode返回值相同,但它们的equals()方法不一定相等。
3.两个对象的hashCode()返回值相等不能判断这两个对象是相等的,但两个对象的hashcode()返回值不相等则可以判定两个对象一定不相等。
库函数和系统调用的区别?
系统调用: 系统调用是指在用户空间的程序向操作系统内核请求需要更高权限运行的服务。它通过软中断向内核态发出一个明确的请求。系统调用实现了用户态进程和硬件设备之间的大部分接口。
库函数: 库函数用于提供用户态服务。它可能封装了一个或几个不同的系统调用,也可能直接提供用户态服务。