为了熟悉集合这一章节,孟哥要求我们重写ArrayList类。为此我重新定义了接口List,简单实现了ArrayList的基本功能。不过在看ArrayList源码的时候发现了很多“特伦舒”,比如,每次用equals时都先假设传入的指针为null,还有对于越界的处理都很“特伦舒”,不是每种处理都叫“特伦舒”!
以indexOf和set为例:
- public int indexOf(Object obj) {
- if (obj == null) {// obj为空指针时
- for (int i = 0; i < size; i++) {
- if (data[i] == null) {
- return i;
- }
- }
- } else {// 防止obj空指针异常
- for (int i = 0; i < size; i++) {
- if (obj.equals(data[i])) {
- return i;
- }
- }
- }
- return -1;
- }
- public Object set(int index, Object obj) {
- if (index >= size) {
- System.out.println("数组下标越界!");
- }
- Object oldValue = (Object) data[index];// 返回设置前的元素
- data[index] = obj;
- return oldValue;
- }
- 源码地址:www.rayfile.com/zh-cn/files/fe295459-c218-11de-86c3-0014221b798a/