java中的集合之Collection与Map接口
集合:存储数据的容器
数组与集合的不同:
数组长度固定,集合长度不固定
数组只能存放相同类型的数据,集合可以存放不同类型的数据
数组可以存放简单数据类型,和类类型的数据,集合只能存放类类型的数据
集合框架:java中用来表示集合,和操作集合的所有类库的统称
集合的分类可以分为Collection和Map两种,Collection中存储了一组对象,而Map则是以键值对的的形式进行存储。
Collection接口继承树:
其中Collection,List,Set都是接口,无法使用new产生实例,但是可以作为子类的引用使用
Collection collection = new ArrayList<>();
但是这样只能使用collecion中定义的规范,而不能使用ArrayList中特有的属性及方法,如需使用需向下转型。
Map分支继承图:
同样Map也是接口,无法使用new产生实例,但是可以作为子类的引用变量
Map map = new HashMap();
Colletion与Map都是集合的最基本的接口,所有集合的类都会遵守这个规范,所以学习集合的第一步是学习这两个接口中的规范。
那就从源码的角度来学习Collection与Map。
1. Collection接口
Collection集合也称为单列集合,一次可以添加一个元素。
int size();
该方法表示返回集合中的元素数量,当大于Integer所能表示的最大值时,返回最大值
boolean isEmpty();如果集合中不存在元素时返回true,否则返回false
boolean contains(Object o);如果集合中包含改元素则返回true,否则返回false
Iterator<E> iterator();返回此集合中的元素的迭代器,对返回元素没有保证
Object[] toArray();返回包含集合中所有元素的数组,类型为Object可以向下转换为具体的类型数组
boolean add(E e);添加一个元素,加入到集合
boolean remove(Object o);从集合中移除指定的元素,移除成功返回true
boolean containsAll(Collection<?> c);此集合是否包含指定集合的所有元素,是返回true
boolean addAll(Collection<? extends E> c);向集合中添加集合,添加成功则返回true
boolean removeAll(Collection<?> c);移除指定集合中的元素,移除成功则返回true
boolean retainAll(Collection<?> c);与指定集合取交集
void clear();清除集合中的元素
Collection的子接口List是有序的,并且可以存在重复的元素。而子接口Set是无序的,并且不可以存在重复的元素
2.Map接口
map的特点为每次可以添加一对元素,所以Map也被称为双列集合,所谓双列集合就是以键值对的形式存储数据,但是键不能重复,键具有唯一性。
int size();返回Map当中有多少对数据
boolean isEmpty();如果不包含键值对则返回true
boolean containsKey(Object key);是否包含指定的键,包含则返回true
boolean containsValue(Object value);是否包含指定的值,若包含则返回true
V put(K key, V value);存储键值对,并返回前一个与key相关联的value,若没有在返回null
void clear();清空Map集合
V remove(Object key);根据指定的key删除键值对,并返回该值
V get(Object key);通过键获取对应的值,若不包含该键则返回null
Set<K> keySet();返回Map当中所有键的Set视图,说简单点就是把Map中的所有键以Set集合的形式返回
Set<Map.Entry<K, V>> entrySet();返回Map中所包含的映射关系的Set视图,看到这肯定很晕啊,所以简单说就是将Map中的映射关系作为对象存储到Set集合,
而映射的类型为Map.Entry,这样可以以迭代的形式获取Set中的关系Map.Entry<K,V>entry,然后可以用entry.getKey()和entry.getValue()来获取键值
Collection<V> values();返回Map中所有键值对的值,注意返回类型为Collection,有的人也许回想为什么之前是set,而这变成返回Collection了呢?因为键
是具有唯一性的,但是值是可以重复的,Set是不允许重复的,所以改为Collection
以上是Map与Collection的主要内容,只要搞懂了Collection与Map接口,再去学习他们的子类的时候会更轻松的。
也欢迎访问我的博客