源码分析一(Iterator、Collection以及List接口)
1:Iterable接口,实现这个接口的类对象可以进行迭代
package java.lang;
import java.util.Iterator;
/**
* 实现这个接口的类所创建的对象可以进行迭代
*/
public interface Iterable<T> { /**
* 调用这个方法会返回迭代器,迭代器可以理解为操纵杆,可以操作某个对象
*/
Iterator<T> iterator();
}
2:Collection类,它是List以及Set的父类
package java.util; /**
* 这个接口继承了Iterable接口,那么它的子孙类实例化时就可以迭代输出
*/ public interface Collection<E> extends Iterable<E> {
// Query Operations /**
* 获取集合长度
* 返回这个集合中元素的个数,如果集合中包含元素数量超过整数所能表示的最大值,那么返回这个最大值,
* 这种超过最大值的情况基本上不存在,如果存在,内存应该早就溢出了。
*/
int size(); /**
* 判断集合是否为空
* 如果集合中没有任何元素,返回true
*/
boolean isEmpty(); /**
* 判断集合中是否包含某个元素
* 如果集合中包含指定的元素,返回true,集合中至少包含一个元素,可以为null或者其他元素
* 比较方式:o==null?e==null:o.equals(e)
*/
boolean contains(Object o); /**
* 这个方法返回一个迭代器,可以对集合中元素进行遍历
*/
Iterator<E> iterator(); /**
* 将集合转化为数组
* 返回一个数组,如果集合中元素是有序的,那么返回的数组也是相同的顺序
* 这个方法为集合和数组之间搭建了互相转换的桥梁
*/
Object[] toArray(); /**
* 此方法返回一个指定类型的数组,如果指定的数组的容量大于集合的容量,那么直接将集合中的
* 元素放到数组中返回,否则重新创建一个新数组
*/
<T> T[] toArray(T[] a); // Modification Operations /**
* 添加元素到集合中,添加成功返回true,否则返回false
*/
boolean add(E e); /**
* 从集合中移除某个对象,移除成功返回true,否则返回false
*/
boolean remove(Object o); // Bulk Operations /**
* 判断集合中是否包含指定集合中所有元素,是返回true,否则返回false
*/
boolean containsAll(Collection<?> c); /**
* 添加指定集合的所有元素到集合中,成功返回true,否则返回false
*/
boolean addAll(Collection<? extends E> c); /**
* 在当前集合中删除指定集合中包含的元素,成功返回true,否则返回false
*/
boolean removeAll(Collection<?> c); /**
* 保留指定集合中包含的元素,换句话说就是删除指定集合中没有的元素
*/
boolean retainAll(Collection<?> c); /**
* 清空集合中所有的元素
*/
void clear(); // Comparison and hashing /**
* 比较两个对象是否相等
*/
boolean equals(Object o); /**
* 获取hashcode的值
*/
int hashCode();
}
3:List集合继承了Collection集合
package java.util;
public interface List<E> extends Collection<E> {
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
Object[] toArray();
<T> T[] toArray(T[] a);
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
/**
* 在指定位置index插入指定集合的元素
*/
boolean addAll(int index, Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
void clear();
boolean equals(Object o);
int hashCode();
/**
* 根据索引index获取指定的元素
* @param index
* @return
*/
E get(int index);
/**
* 替换指定位置的元素,返回这个位置的元素
* @param index
* @param element
* @return
*/
E set(int index, E element);
/**
* 在指定位置插入元素,索引处元素依次向右移动
* @param index
* @param element
*/
void add(int index, E element);
/**
* 移除指定位置的元素
* @param index
* @return
*/
E remove(int index);
// Search Operations
/**
* 返回集合中第一次出现指定元素的索引,如果没有返回-1
*/
int indexOf(Object o);
/**
* 返回指定元素的索引,从最后一个元素开始查找
* @param o
* @return
*/
int lastIndexOf(Object o);
// List Iterators
/**
* 返回一个list的迭代器
*/
ListIterator<E> listIterator();
/**
* 返回一个list的迭代器,从指定位置开始
*/
ListIterator<E> listIterator(int index);
// View
/**
* 返回一个子集,从fromIndex开始到toIndex结束
*/
List<E> subList(int fromIndex, int toIndex);
}
源码分析一(Iterator、Collection以及List接口)的更多相关文章
- Java容器类源码分析之Iterator与ListIterator迭代器(基于JDK8)
一.基本概念 迭代器是一个对象,也是一种设计模式,Java有两个用来实实现迭代器的接口,分别是Iterator接口和继承自Iterator的ListIterator接口.实现迭代器接口的类的对象有遍历 ...
- 【JDK】JDK源码分析-List, Iterator, ListIterator
List 是最常用的容器之一.之前提到过,分析源码时,优先分析接口的源码,因此这里先从 List 接口分析.List 方法列表如下: 由于上文「JDK源码分析-Collection」已对 Collec ...
- Spring源码分析——资源访问利器Resource之接口和抽象类分析
从今天开始,一步步走上源码分析的路.刚开始肯定要从简单着手.我们先从Java发展史上最强大的框架——Spring...旗下的资源抽象接口Resource开始吧. 我看了好多分析Spring源码的,每每 ...
- Spring5源码分析之启动类的相关接口和注解
一些基础但是核心的知识总结: Spring Boot项目启动的时候需要加@Configuration. @ComponentScan @Configuration + @Bean 把第三方jar包注入 ...
- LevelDB源码分析--使用Iterator简化代码设计
我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文. 下面我们再来看一个例子,我们为一个书店写程序, ...
- 【JDK】JDK源码分析-ArrayList
概述 ArrayList 是 List 接口的一个实现类,也是 Java 中最常用的容器实现类之一,可以把它理解为「可变数组」. 我们知道,Java 中的数组初始化时需要指定长度,而且指定后不能改变. ...
- Java集合【5】-- Collections源码分析
目录 一.Collections接口是做什么的? 二.Collections源码之大类方法 1.提供不可变集合 2.提供同步的集合 3.类型检查 4.提供空集合或者迭代器 5.提供singleton的 ...
- Spring源码分析——资源访问利器Resource之实现类分析
今天来分析Spring的资源接口Resource的各个实现类.关于它的接口和抽象类,参见上一篇博文——Spring源码分析——资源访问利器Resource之接口和抽象类分析 一.文件系统资源 File ...
- dubbo源码分析02:服务引用
一.何时创建服务引用 引用官方文档的原话,如果将Dubbo托管在Spring-IOC容器下,Dubbo服务引用的时机有两个,第一个是在Spring容器调用ReferenceBean的afterProp ...
随机推荐
- JDK1.8 重识HashMap
摘要 JDK1.8相较于1.7对HashMap做了很大的优化,比如加入了新数据结构红黑树.Hash算法的优化和扩容的优化. 本篇结合这些区别,探索HashMap的结构实现和功能原理. 存储结构-字段 ...
- 【转】26张PPT让你告别拖延症
不论你如何富有,你都赚不到更多的时间,你也回不到过去.没有那么多的假如,只有指针滴答的时光飞逝和你应该好好把握的现在. 可能的话,请仔细读读PPT原件而不要只是看翻译吧. 1.时间常有,时间优先. 2 ...
- java的几种对象(PO,VO,DAO,BO,POJO)解释 【转】
java的几种对象(PO,VO,DAO,BO,POJO)解释 一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中 ...
- 根据城市表生成json数据
T_CityManager am = new T_CityManager(); string tou = "var LAreaData=["; string value = &qu ...
- keep or remove data frame columns in R
You should use either indexing or the subset function. For example : R> df <- data.frame(x=1:5 ...
- [hbase] 查询数据
获取hbase数据 说说:count 'SOCIA:T_SOCIA_ALBUM_TALK'scan 'SOCIA:T_SOCIA_ALBUM_TALK',{LIMIT=>5}get 'SOCIA ...
- Linux:Tomcat报错: Error creating bean with name 'mapScheduler' defined in ServletContext resource 的解决方法
2013-12-31 14:22:28 [ERROR] [ContextLoader.java->initWebApplicationContext(220) Context initializ ...
- Axiom3D:Ogre动画基本流程与骨骼动画
在Axiom中,Animation类用于管理动画,在此对象中主要管理着AnimationTrack对象,此对象用于管理动画的各种类型的每一桢.在Axiom中,动画类型主要有变形动画,姿态动画,骨骼动画 ...
- IDEA MAVEN Failed to create a Maven project 'C:/gitProjects/mayProj/pom.xml' already exists in VFS
When adding the module to an existing module that already has a POM, it is necessary to manually spe ...
- c++ 的makefile文件实例
首先声明, 感谢九哥的帮助,因为从来没写过makefile, 所以一直是手动编译, 然后有一次写了三个文件, 需要编译, 而我只编译了一个文件, 所以一直出错, 九哥告诉我用makefile更方便, ...