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

这个抽象类实现了List接口,继承了AbstractCollection抽象类,是ArrayList的直接父类。

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>

这是这个类的基本情况。

protected AbstractList() {

}

这是构造方法。

public boolean add(E e) {

add(size(), e);

return true;

}

public void add(int index, E element) {

throw new UnsupportedOperationException();

}

这两个方法一起看,上面那个方法调用第二个方法,传入size()方法的返回值作为第一个参数,size()方法是父类的抽象方法,这个类里没有具体实现。第二个方法这里直接抛出异常。

abstract public E get(int index);

获取指定位置元素的方法,抽象方法。

public E set(int index, E element) {

throw new UnsupportedOperationException();

}

为指定位置设值的方法,这里直接抛出异常。

public E remove(int index) {

throw new UnsupportedOperationException();

}

删除元素的方法,这里直接抛出异常。

public int indexOf(Object o) {

ListIterator<E> it = listIterator();

if (o==null) {

while (it.hasNext())

if (it.next()==null)

return it.previousIndex();

} else {

while (it.hasNext())

if (o.equals(it.next()))

return it.previousIndex();

}

return -1;

}

这个方法是返回参数元素所在下标的方法。

首先获取List迭代器。如果参数为空,就开始迭代元素,发现空元素时,返回迭代器刚迭代的下标。如果参数不为空,也开始迭代,发现元素和参数相等时,返回迭代器刚迭代的下标。如果始终没有返回值,最后返回-1。

public int lastIndexOf(Object o) {

ListIterator<E> it = listIterator(size());

if (o==null) {

while (it.hasPrevious())

if (it.previous()==null)

return it.nextIndex();

} else {

while (it.hasPrevious())

if (o.equals(it.previous()))

return it.nextIndex();

}

return -1;

}

这个方法是返回参数元素最后出现的下标的方法。

首先获取List迭代器,迭代的位置是最后一个元素。首先判断参数是否为空,如果参数为空,则List迭代器开始向前迭代,发现最后一个为空的参数,就返回迭代器刚迭代的下标。如果参数不为空,同样开始向前迭代,判断最后一个和参数相等的元素,则迭代器返回刚迭代的下标。

如果始终没有返回值,则返回-1。

public void clear() {

removeRange(0, size());

}

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();

}

}

这两个方法一起看,第一个方法是清空所有元素的方法,调用了第二个方法,传入0和本List的长度两个参数。

第二个方法首先获取List迭代器,从第一个参数开始迭代,如果是第一个方法调用来的就是0。

进入for循环,循环两个参数之差次,开始删除元素,删除两个参数之差个,因为迭代器是从第一个参数开始迭代的。

时间: 2024-11-17 21:11:14

共同学习Java源代码--数据结构--AbstractList抽象类(一)的相关文章

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

protected transient int modCount = 0; 这个属性是记录这个List被修改的次数.在以下几个内部类和非public类中使用. private class Itr implements Iterator<E> 首先先看这个内部类,实现了迭代器接口. int cursor = 0; 这个变量是游标. int lastRet = -1; 这个变量代表的是上一次迭代的元素的下标.如果删除一个元素的话,那么这个值就是-1. int expectedModCount =

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

private class ListItr extends Itr implements ListIterator<E> 这又是一个内部类.继承自上一个内部类,实现了ListIterator接口,这个是专门迭代List的迭代器. ListItr(int index) { cursor = index; } 首先是默认修饰符修饰的构造方法,将参数赋值给cursor变量. public boolean hasPrevious() { return cursor != 0; } 这个方法判断是否可以

共同学习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()) {

共同学习Java源代码--数据结构--List接口

这个接口是各种List类的抽象接口,这个接口继承自Collection接口. public interface List<E> extends Collection<E> 这是接口的基本信息. int size(); 这个方法返回List的元素数. boolean isEmpty(); 这个方法判断List是否为空. boolean contains(Object o); 这个方法判断是否包含某个元素. Iterator<E> iterator(); 获取迭代器的方法.

【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化

[原文]https://www.toutiao.com/i6594587397101453827/ Java核心数据结构(List,Map,Set)使用技巧与优化 JDK提供了一组主要的数据结构实现,如List.Map.Set等常用数据结构.这些数据都继承自 java.util.Collection 接口,并位于 java.util 包内. 1.List接口 最重要的三种List接口实现:ArrayList.Vector.LinkedList.它们的类图如下: 可以看到,3种List均来自 Ab

慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类

在java面向对象编程的,抽象类和接口始终存在有疑问的地方,因为两者太多相似有太多不同,在刚开始学习的时候经常弄的不对,使用情景搞混,今天来总结之前学习Java中接口和抽象类的问题. 抽象类 了解:只声明,未具体实现. abstract void cry(); 抽象方法必须使用关键字abstract进行修饰,如果一旦一个类中包含了abstract方法,那么这个类必须使用abstract进行修饰:因为抽象类中含有未实现的方法,抽象类不能被实例化:抽象类不一定包含抽象方法,也就是说抽象类可以没有抽象

分享JAVA用户权限管理框架源代码JAVA权限管理java源代码框架代码,学习有帮助

JAVA用户权限管理框架源代码JAVA权限管理java源代码框架代码,用户功能权限控制到菜单以及菜单的操作按钮 MyEclipse+JDK1.6+apache-tomcat-6.0.14+SQL2005/2008/2012 是一套非常成熟的框架程序,可直接用于大型系统.基础框架快速开发,及程序员学习. .兼容 IE6,7,8,9 /Firefox /Google Chrome 这些浏览器都测试过 支持3级菜单导航. 框架包括用户管理.菜单管理.角色管理.权限管理.日志管理等功能. 内容包括源代码

假如时光倒流,我会这么学习Java

回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路. [入门] 我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让人哭啊. 后来我就看<Thinking in Java> ,< Java 核心技术 >, 感觉也不吃力. 如果我之前没学过别的语言,或者半路出家转到计算机行业, 我不会先看上面那两本, 相反我会选<Hea

全中国的省市县镇乡村数据获取以及展示java源代码

第一步.准备工作(数据源+工具): 数据源(截止目前最全面权威的官方数据):http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/ 爬取数据的工具(爬虫工具):http://jsoup.org/ 第二步.数据源分析: 首先jsoup工具的使用我在这里就不做讲解了,感兴趣的可以自己动手去查阅. 做开发就应该多去了解一些软件工具的使用,在平常开发过程中遇到了才知道从何下手,鼓励大家多平时留意一些身边的软件工具,以备不时之需.在做 这个东西以前,我