共同学习Java源代码--数据结构--AbstractList抽象类(三)

    public boolean equals(Object o) {
        if (o == this)
            return true;
        if (!(o instanceof List))
            return false;


        ListIterator<E> e1 = listIterator();
        ListIterator<?> e2 = ((List<?>) o).listIterator();
        while (e1.hasNext() && e2.hasNext()) {
            E o1 = e1.next();
            Object o2 = e2.next();
            if (!(o1==null ? o2==null : o1.equals(o2)))
                return false;
        }
        return !(e1.hasNext() || e2.hasNext());

    }

这个方法是判断两个List是否相等的方法。

首先判断如果参数和本List引用的同一对象直接返回true。如果参数不属于List接口的实现类,直接返回false。

然后分别获取参数和本List的List迭代器,其中参数的List迭代器的泛型是?也就是虚的,本List的List迭代器的泛型是元素类型。

然后开始迭代两个List,获取各自的每个元素,依次判断是否为空以及是否相等,如果不等返回false。

一直没有返回false的话,就判断两个List是否还可迭代,如果有一个还可以迭代,就返回false,两个都不可再迭代了就返回true。||这个两侧必须都是false,整个表达式才会是false,左侧是true的话就会短路。。。

    public int hashCode() {
        int hashCode = 1;
        for (E e : this)
            hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
        return hashCode;
    }

这个方法是返回哈希值的方法。

首先定义初始哈希值为1,然后遍历这个List的所有元素,用31乘以初始哈希值再加上每个元素的哈希值,如果元素为空就加上0,把计算好的值赋给初始哈希值,然后一次次循环。。。

最后返回这个哈希值。

    protected void removeRange(int fromIndex, int toIndex) {
        ListIterator<E> it = listIterator(fromIndex);
        for (int i=0, n=toIndex-fromIndex; i<n; i++) {
            it.next();
            it.remove();
        }
    }

这个方法是删除某区间内元素的方法。

首先获取List迭代器,起始迭代位置是第一个参数,然后进入for循环,循环要删除的区间所含元素数次,然后用迭代器删除这些元素。

    private String outOfBoundsMsg(int index) {
        return "Index: "+index+", Size: "+size();
    }

这个方法是返回一个错误信息,在操作下标时,下标越界的提示信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值