共同学习Java源代码--数据结构--AbstractList抽象类(二)
2016-05-08 18:49
549 查看
public boolean addAll(int index, Collection<? extends E> c) {
rangeCheckForAdd(index);
boolean modified = false;
for (E e : c) {
add(index++, e);
modified = true;
}
return modified;
}
private void rangeCheckForAdd(int index) {
if (index < 0 || index > size())
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
这两个方法一起看。
第一个方法是从指定下标开始添加参数所有元素的方法。首先先调用第二个方法检查第一个方法第一个参数index是否会越界,第二个方法判断参数是否小于零或是否大于本List长度,否则直接抛出异常。
第一个方法然后创建一个modified变量,赋初始值为false,代表本List没有被改变。
进入foreach循环,遍历参数的所有元素,然后调用add方法添加元素,然后将modified设为true,最后返回modified。
public Iterator<E> iterator() {
return new Itr();
}
获取迭代器的方法,创建一个私有内部类的实例。
public ListIterator<E> listIterator() {
return listIterator(0);
}
public ListIterator<E> listIterator(final int index) {
rangeCheckForAdd(index);
return new ListItr(index);
}
这两个方法一起看,都是返回List迭代器的方法。第一个方法将参数0传给第二个方法,第二个方法的参数index就是起始迭代的位置,第二个方法首先先调用之前的方法判断index是否合法,一旦合法就创建另一个私有内部类的实例。
public List<E> subList(int fromIndex, int toIndex) {
return (this instanceof RandomAccess ?
new RandomAccessSubList<>(this, fromIndex, toIndex) :
new SubList<>(this, fromIndex, toIndex));
}
这个方法是截取List的方法。首先判断本List是否是RandomAccess接口的实现类,如果是就创建一个RandomAccessSubList实例,否则就创建SubList实例。
rangeCheckForAdd(index);
boolean modified = false;
for (E e : c) {
add(index++, e);
modified = true;
}
return modified;
}
private void rangeCheckForAdd(int index) {
if (index < 0 || index > size())
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
这两个方法一起看。
第一个方法是从指定下标开始添加参数所有元素的方法。首先先调用第二个方法检查第一个方法第一个参数index是否会越界,第二个方法判断参数是否小于零或是否大于本List长度,否则直接抛出异常。
第一个方法然后创建一个modified变量,赋初始值为false,代表本List没有被改变。
进入foreach循环,遍历参数的所有元素,然后调用add方法添加元素,然后将modified设为true,最后返回modified。
public Iterator<E> iterator() {
return new Itr();
}
获取迭代器的方法,创建一个私有内部类的实例。
public ListIterator<E> listIterator() {
return listIterator(0);
}
public ListIterator<E> listIterator(final int index) {
rangeCheckForAdd(index);
return new ListItr(index);
}
这两个方法一起看,都是返回List迭代器的方法。第一个方法将参数0传给第二个方法,第二个方法的参数index就是起始迭代的位置,第二个方法首先先调用之前的方法判断index是否合法,一旦合法就创建另一个私有内部类的实例。
public List<E> subList(int fromIndex, int toIndex) {
return (this instanceof RandomAccess ?
new RandomAccessSubList<>(this, fromIndex, toIndex) :
new SubList<>(this, fromIndex, toIndex));
}
这个方法是截取List的方法。首先判断本List是否是RandomAccess接口的实现类,如果是就创建一个RandomAccessSubList实例,否则就创建SubList实例。
相关文章推荐
- 共同学习Java源代码--数据结构--AbstractList抽象类(一)
- 【数据结构】C语言实现栈的进栈,出栈,遍历,清空等操作
- 数据结构与算法练习-二叉树
- 共同学习Java源代码--数据结构--List接口
- 排序算法——冒泡排序
- 排序算法——选择排序
- 排序算法——希尔排序
- 单链表的节点内数据值的删除问题(携程网笔试题)
- 数据结构——排序相关问题
- 数据结构(严蔚敏)第四章 串 实例——索引表
- Windows 内核数据结构学习总结
- 搜索引擎索引数据结构和算法
- 【数据结构】处理哈希冲突的开链法(哈希桶)算法实现
- 【数据结构】哈希表的线性探测算法
- 数据结构与算法——递归简论
- 【搜索引擎】搜索引擎索引数据结构和算法
- 第1章 概述
- 【Codevs】1082 线段树练习 3 && 线段树模板
- Java千百问_06数据结构(012)_如何遍历数组
- 数据结构上机测试1:顺序表的应用