java 集合类 底层源码解析,慢速更新~偏新手

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

今天先到这~要下班啦


猜你喜欢

转载自blog.csdn.net/MyEclipse_1214/article/details/52066662