java.util.List 源码分析(JDK1.7)
---------------------------------------------------------------------------------
java.util.List是一个接口,它的定义如下:
public interface List extends Collection {
// Query Operations
// Modification Operations
// Bulk Modification Operations
// Comparison and hashing
// Positional Access Operations
// Search Operations
// List Iterators
// View
}
(1)List列表是一个有序的collection,此接口可以对列表中每个元素的插入位置进行精确地控制
(2)用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索List列表中的元素
(3)List列表允许重复的元素
(4)List接口提供了特殊的迭代器,称为ListIterator,除了允许Iterator接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问
---------------------------------------------------------------------------------
下面来看看java.util.List中具体有哪些方法:
从下面的表格中可以看出java.util.List接口中一共有25个方法:
其中查询操作6个;修改操作2个;批量操作6个;比较和哈希操作2个;位置访问操作4个;位置查询操作2个;List Iterator操作2个;视图操作1个;(用浅蓝色字体标出的是java.util.List接口新增的方法,其余的都是从java.util.Collection中来的。 (~_~ 真是不嫌事情多,提供了25个方法需要由其扩展类来实现...))
查询操作
int size()
返回列表中的元素数。如果列表包含多于Integer.MAX_VALUE个元素,则返回Integer.MAX_VALUE
boolean isEmpty()
如果列表不包含元素,则返回true
boolean contains(Object o)
如果列表包含指定的元素,则返回true。
Iterator iterator()
返回按适当顺序在列表的元素上进行迭代的迭代器
Object[] toArray()
返回按适当顺序包含列表中的所有元素的数组
T[] toArray(T[] a)
返回按适当顺序包含列表中所有元素的数组
修改操作
boolean add(E e)
向列表的尾部添加指定的元素
boolean remove(Object o)
从此列表中移除第一次出现的指定元素
批量操作
boolean containsAll(Collection> c)
如果列表包含指定collection的所有元素,则返回true
boolean addAll(Collection extends E> c)
添加指定collection中的所有元素到此列表的结尾
boolean addAll(int index,Collection extends E> c)
将指定collection中的所有元素都插入到列表中的指定位置
boolean removeAll(Collection> c)
从列表中移除指定collection中包含的其所有元素
boolean retainAll(Collection> c)
仅在列表中保留指定collection中所包含的元素
void clear()
从列表中移除所有元素
比较和哈希操作
boolean equals(Object o)
比较指定的对象与列表是否相等
int hashCode()
返回列表的哈希码值
位置访问操作
E get(int index)
返回列表中指定位置的元素
E set(int index,E element)
用指定元素替换列表中指定位置的元素
void add(int index,E element)
在列表的指定位置插入指定元素
E remove(int index)
移除列表中指定位置的元素
位置查询操作
int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引
int lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引
List Iterators
ListIterator listIterator()
返回此列表元素的列表迭代器
ListIterator listIterator(int index)
返回列表中元素的列表迭代器
视图操作
List subList(int fromIndex,int toIndex)
返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
再来看看下图:
---------------------------------------------------------------------------------
java.util.List源码如下:(看看下面的源码,定义的很规范,各种操作都有-----> 此时应该想到它的实现类该有多可怜,要实现多少方法呀。~_~)
package java.util;
public interface List extends Collection {
// Query Operations
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator iterator();
Object[] toArray();
T[] toArray(T[] a);
// Modification Operations
boolean add(E e);
boolean remove(Object o);
// Bulk Modification Operations
boolean containsAll(Collection> c);
boolean addAll(Collection extends E> c);
boolean addAll(int index, Collection extends E> c);
boolean removeAll(Collection> c);
boolean retainAll(Collection> c);
void clear();
// Comparison and hashing
boolean equals(Object o);
int hashCode();
// Positional Access Operations
E get(int index);
E set(int index, E element);
void add(int index, E element);
E remove(int index);
// Search Operations
int indexOf(Object o);
int lastIndexOf(Object o);
// List Iterators
ListIterator listIterator();
ListIterator listIterator(int index);
// View
List subList(int fromIndex, int toIndex);
}
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
源码(09) -- java.util.Arrays
java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...
源码(03) -- java.util.Collection<;E>;
java.util.Collection 源码分析(JDK1.7) -------------------------------------------------------- ...
Java源码之 java.util.concurrent 学习笔记01
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...
源码(05) -- java.util.AbstractCollection<;E>;
java.util.AbstractCollection 源码分析(JDK1.7) ------------------------------------------------- ...
源码(06) -- java.util.AbstractList<;E>;
java.util.AbstractList 源码分析(JDK1.7) ------------------------------------------------------- ...
源码(07) -- java.util.Iterator<;E>;
java.util.Iterator 源码分析(JDK1.7) ----------------------------------------------------------- ...
源码(08) -- java.util.ListIterator<;E>;
java.util.ListIterator 源码分析(JDK1.7) ------------------------------------------------------- ...
JDK1.8源码(四)——java.util.Arrays 类
java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList public static ...
JDK1.8源码(五)——java.util.ArrayList 类
关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的. 1.ArrayList 定义 ArrayList 是一个用数组实 ...
随机推荐
linux添加时间提示符
给PS1添加\t [root@lanny ~]# echo $PS1 [\u@\h \W]\$ [root@lanny ~]# export PS1="[\u@\h \W\t]\$" ...
PHP 常用正则汇总
平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: }|d{})-((([-]{}))|([|]))-(([-]([-]{}))|([|]))$/ ([-]{}) ...
Kinect For Windows V2开发日志二:Kinect V2的基本参数
以下内容节选自Heresy的博客: 彩色影像:1920 x 1080 @ 30 / 15 FPS(根据环境亮度) 深度影像:512 x 424 @ 30 FPS.16bit 距离值(mm).可侦测 ...
CentOS 5 64bit 编译安装MySQL报错
报错情况: 在执行./configure时出现configure: error: No curses/termcap library found 解决方法: ./configure时加上参数--w ...
在C语言中以编程的方式获取函数名
仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及代码分析器,经常会需要在运行时访问 ...
Tomcat迁移到WebsphereURL获取中文参数乱码问题
URL携带中文参数时,tomcat通常用两种方法可以解决中文乱码问题: String param = new String(request.getParameter("param " ...
restful 风格的理解
rest 其实就是representation status transfer(表现层状态转换) restful 风格的API具有如下特征: 1. 每个URI 包含一种资源,而且URI ...
Android 性能优化(一)内存篇
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54377370 本文出自:[余志强的博客] 本博客同时也发布在 Hoo ...
递归求6的阶乘(考虑int类型溢出)
编码 public class Factorial { public static void main(String[] args) { System.out.println(fac(6)); } p ...
买了第一台mac
今天,我的第一台mac到手了.是Macbook air 13.3寸屏的.正好这几天bestbuy大打折,索性入手了一台15年最低配的,一共只花了$750,包括税. 还是有点舍不得,而且用不习惯.