源码分析一(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 ...
随机推荐
- TP v5中Url Compat模式
compatible 对于配置pathinfo的支持,在Nginx作服务器.无数种系统要同时运行的环境,实在是一项很累赘的事情,而又不想很low的多个参数(像m.c.a)构造路由参数,我需要那种不必强 ...
- sam9260 adc 头文件
/* * driver/char/at91_adc.h * * Copyright (C) 2007 Embedall Technology Co., Ltd. * * Analog-to-digit ...
- Android Bitmap 缩放 旋转 水印 裁剪操作
在android当中,Bitmap代表一个图片,里面封装了图片相关的信息. 一.将图片进行缩放操作 1.获得Bitmap对象 Bitmap bitmap = BitmapFactory.decodeR ...
- CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数
类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 // person.h #ifndef _PERSON_H_ #define _PERSON_H_ class Person{ public : ...
- linux命令实现http的get和post请求
1. wget wget -O - "http://$IP/host" --header="Content-Type: application/json" - ...
- mybatis中的#{}和${}区别
mybatis中的#{}和${}区别 2017年05月19日 13:59:24 阅读数:16165 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #use ...
- 唯一id算法
https://blog.csdn.net/guodongcc322/article/details/55211273 https://blog.csdn.net/weixin_36751895/ar ...
- click只能点击一次
<select id="s_province" name="s_province" class="s_province">< ...
- [spark 快速大数据分析读书笔记] 第一章 导论
[序言] Spark 基于内存的基本类型 (primitive)为一些应用程序带来了 100 倍的性能提升.Spark 允许用户程序将数据加载到 集群内存中用于反复查询,非常适用于大数据和机器学习. ...
- Python 文件操作三
文件重命名os模块中的rename()可以完成对文件的重命名操作rename(需要修改的文件名, 新的文件名) import os os.rename("11.txt", &quo ...