我们都知道在Java中,集合框架在Java基础中有很大的分量,集合中的Map、Collection 、List、Set接口,子类HashMap,HashSet、ArrayList等,这些接口和类的作用及实现方式都是不一样的,接下来我们重新认识一下这些接口和类吧!!
我们先看看关系图 Java集合框架关系图.png关系图中所表现出的,Map因为数据结构的原因所以是独立接口,List、Set数据类型一致所以可以继承相同的Collection接口;
Map实现类:HashMap、Hashtable、LinkedHashMap;
List实现类:Vector、ArrayList、LinkedList;
Set实现类:TreeSet、HashSet、LinkedHashSet;
当然,笔者列出的这几个类并非所有的实现类,只是我们经常在面试或者码代码中所遇到的。
下面从jdk中列举出Map、List、Set的一些核心函数
Map
public interface Map<K, V> {
int size(); // 集合大小
boolean isEmpty(); // 是否为空
boolean containsKey(Object key); // 是否包含此 key
boolean containsValue(Object value); // 是否包含此value
V get(Object key); // 根据key获取value
V put(K key, V value); // 添加
V remove(Object key); // 根据key删除
void putAll(Map<? extends K, ? extends V> m); // 添加所有
Set<K> keySet(); // 获取keys
Collection<V> values(); // 获取 values
}
List
public interface List<E> extends Collection<E> {
int size(); //集合大小
boolean isEmpty(); //是否为空
boolean contains(Object o); //是否包含
boolean add(E e); //添加
boolean remove(Object o); //根据数据删除
boolean containsAll(Collection<?> c); //是否包含所有
boolean addAll(Collection<? extends E> c); //添加所有
boolean removeAll(Collection<?> c); //删除所有
void clear(); //清空
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<E> subList(int fromIndex, int toIndex); //根据起始下标截取
}
Set
public interface Set<E> extends Collection<E> {
int size(); //集合大小
boolean isEmpty(); //是否空集合
boolean contains(Object o);//是否包含
boolean add(E e); //添加
boolean remove(Object o); //根据参数
boolean containsAll(Collection<?> c); //是否包含所有参数
boolean addAll(Collection<? extends E> c); //添加所有参数
boolean removeAll(Collection<?> c); //删除所有参数
void clear(); //清空所有
}
可以从上面的核心方法看出,Map、Set、List大部分的函数的功能都是一样的,只不过因为数据结构或者功能性的不同而拆分为多个独立的分支;Map在实例化时必须知名K,V的数据类型,否则无法使用Map;而List、Set 也许要在实例化时指明数据类型,不过类型不是K,V结构,而是提供简单Object类型即可。
总结:
1:Map 为K,V结构,也就是我们常说的Key,Value结构;Map针对这种特殊的结构,提供了一些相对于List和Set 一些其他的支撑函数或者说进行了改造,比如 containsKey、containsValue、keySet、values等函数;
2:Map不继承与Collection 接口,但是List和Set继承于Collection接口;
3:Map、Set、List的核心函数大同小异,基本都是类似的,但实现方式各有不同;
今天就先到这儿了,后面我们慢慢深剖关于Java集合大大小小的知识及源码分析!!
网友评论