Java 容器泛型_底层源码解读 尚学堂133

先上代码:

import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

public class Test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		Map map = new HashMap();
	}
}

我们只是强烈建议使用泛型。事实上,不使用编译器也不会报错!就像上面代码中,Map后面没有<>

eclipse代码里写一个List,按Ctrl+Shift+o导入包,会发现有选择:

我们要导入的是java.util.List这个包

查看其源码(Ctrl+鼠标左键):

public interface List<E> extends Collection<E> {
    ......
}

读源码不用所有的都读通,读源码是为了更深刻地理解概念,而不是为了读源码。

List接口后面跟了个泛型<E>

List接口的一个实现类ArrayList也需要导入(import java.util.ArrayList;)。

其源码:

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{......}

会发现其实现类ArrayList后面也跟了个泛型<E>

他相关的方法里也会用到泛型,比如:

public E set(int index, E element) {
        rangeCheck(index);

        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }

接口Map有2个泛型:

public interface Map<K,V> {
    ......
}

它的实现类HashMap也用了泛型:

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable {......}
经验分享 程序员 微信小程序 职场和发展