Java集合【总目录】
前言
2020年6月6日
之前自己学习Java集合都是很笼统地学,知识点很零散,所以想开一个栏目,对自己的Java集合知识进行梳理展示,也供各位同学借鉴。如有错误之处,请各位不吝指教!
1.什么是Java集合?
Ⅰ、集合是一个存放数据的容器;
Ⅱ、集合的类型有三种,分别对应三种存放规则:
List(列表):连续、有序地存放数据,
Set(集):不可重复地存放数据,
Map(映射):存放键值数据对key-value,key不可重复。
Java集合的结构图如下:
图中很详细地表示了各接口和类之间的关系,结合图和源码,我们可以看到,一些实现类会继承一个抽象类以及实现一个接口,如:
HashMap:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{...}
ArrayList:
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{...}
HashSet:
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{...}
那它为什么不直接实现接口,还要多继承一个抽象类呢?
我们将拥有同一特性的几个类的公共方法提取出来,放到一个抽象类中去,这就相当于给这些类设置了一个设计规范。
比如:Set接口下的实现类都必须有add(添加),get(读取)、remove(删除)、clear(清空)等方法,那就先写一个AbstractSet抽象类存放这些方法,让所有Set的实现类都继承AbstractSet,然后再根据子类的需求看是否需要重写。
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
protected AbstractList() {
}
public boolean add(E e) {
add(size(), e);
return true;
}
abstract public E get(int index);
public E set(int index, E element) {
throw new UnsupportedOperationException();
}
void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
public void clear() {
removeRange(0, size());
}
......
}
知道抽象类的作用后,我们可以把上面的图进一步简化,得到它的简易版。
详解链接:
List
ArrayList:ArrayList源码分析
Set
Map
HashMap:HashMap源码分析