版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MyEclipse_1214/article/details/52066662
我决定从java底层源码开始自己的博客之旅,水平有限,很有可能写的不对,欢迎大家指出缺点~博客慢速保持更新!
先从java最常用的集合类开始更新吧~ java的集合类均来自于 java.util包下
java单列顶层接口 Collection 先看看该接口的定义:
public interface Collection<E> extends Iterable<E>
可以看出顶级接口Collection 继承了 Iterable ,而Iterable 的定义是这样的:
package java.lang;// Iterable 是在java.langbao
import java.util.Iterator;
/** Implementing this interface allows an object to be the target of
* the "foreach" statement.
* @since 1.5
*/
public interface Iterable<T> {
/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
Iterator<T> iterator();// Iterable 就定义了一个方法 ,返回值为迭代器对象
这里看到了 这两个接口的定义,旁边都定义了 E 和T , E和T是java中的泛型定义,意思是代表任意对象,那T,E有什么区别呢?还有其他的比如说K,V是什么意思呢?
我网查查了下资料,E代表Element 元素 指的是集合中的元素,T代表Type 指的是java类,K代表Key 指的是键,V代表Value 指得是值,具体可以看这个大神的博客
其实我也是这里看的 http://blog.csdn.net/chenlycly/article/details/25561029
我们继续 ,Collection还是比较简单,定义了几个方法,如下:
package java.util;
/**
* 可以看到集合是1.2版本才有的
* @since 1.2
*/
public interface Collection<E> extends Iterable<E> {
// Query Operations 查询的操作
/**
* 返回的是集合大小
*/
int size();
/**
* 判断集合是否为空
*/
boolean isEmpty();
/**
* 判断集合是否包含元素,参数用了Object类型,所以可以传入任意的参数
*/
boolean contains(Object o);
/**
* 返回迭代器对象,就是继承自Iterator父接口中的方法
*/
Iterator<E> iterator();
/**
* 将集合转换成数组 ,可以看到返回值是 Object类型的数组
*/
Object[] toArray();
/**
* 同样是将集合转换成数组,返回的泛型数组,是通过传入的泛型参数去定义的
*/
<T> T[] toArray(T[] a);
// Modification Operations 修改的操作
/**
* 这是我们最常见的集合添加元素的方法
*/
boolean add(E e);
/**
* 集合删除某元素的方法
*/
boolean remove(Object o);
// Bulk Operations
/**
* 判断是否包含参数(集合)中的全部元素
*/
boolean containsAll(Collection<?> c);
/**
* 向集合中添加参数(集合)中的全部元素
*/
boolean addAll(Collection<? extends E> c);
/**
* 删除集合中参数(集合)中的全部元素
*/
boolean removeAll(Collection<?> c);
/**
* 首先返回值的含义是,本集合A是否和参数(集合B)有交集,有则返回true,否则false
* 并且在调用本方法后,集合A内部非交集的元素都被去掉了,只剩下交集元素
*/
boolean retainAll(Collection<?> c);
/**
* 清除集合中的所有元素
*/
void clear();
// Comparison and hashing 比较的方法
/**
* 这是大家熟悉的Object中的方法,Object默认实现的是 == ,就是比较两引用是否指向同一个对象
*/
boolean equals(Object o);
/**
* 返回 hashcode
*/
int hashCode();
}
可以看到Collection的定义,是符合java变成的 面向接口编程以及面向抽象原则的,Colllection分析到这里,下一个博客将带来它的轻量级实现
AbstractCollection<E>
今天先到这~要下班啦