集合框架(一)
一、集合框架介绍
集合是一个对象,它代表一组对象(JAVA 面向对象思想);
集合框架的优点:
提供基本的数据结构与算法,减少了编程量;
提供高性能的实现;
二、集合概述
集合接口被分为两大部分,最基本的Collection以及Map;如下图:
我们在实现集合接口时,需要遵循以下标准:
- 不支持(add,remove,clear)操作的集合称之为unmodifiable;相反为modifiable;
- 确保集合中的对象不会有更改的集合为immutable,反之为mutable;
三、Collection接口
集合框架的根接口,我们有必要对其好好分析:
实现Collection接口时要注意:缺省方法的实现是不支持同步(synchronization)的;如果需要实现同步,我们需要重写缺省实现;
接口方法总结:
集合作为数据对象的容器,需要提供一些基础的数据操作方法,比较容易想到的就是增加元素、删除元素和查找元素;
类型 方法 说明 增加 add(E):boolean 增加一个元素 addAll(Collection<?>):boolean 增加一组元素 删除 remove(Object):boolean 移除一个元素 removeAll(Collection<?>):boolean 移除一组元素 removeIf(Predicate<? super E>):boolean 移除指定条件的元素 clear():void 清除所有元素 包含元素 contains(Object):boolean 判断是否包含某元素 containsAll(Collection<?>):boolean 判断是否包含一组元素 比较 equals(Object):boolean 比较两个对象是否相等 集合
基本性质size():int 集合大小 isEmpty():boolean 集合是否为空 hashCode():int 求集合的HashCode iterator():Iterator<E> 集合迭代器 转换 toArray():Object[] 将集合转换为数组 toArray(T[])<T>:T[] 返回一个指定数组,包含集合中的所有元素 求交集 retainAll(Collection<?> c) 求集合交集 其它 spliterator():Spliterator<E> 可分割迭代器,用于并行遍历数据源(后续详细讨论) stream() :Stream<E> 返回流 parallelStream():Stream<E> 返回并行执行流
四、Map接口
Map常常用来保存键值对;用于基于键来查找对应的值;所以一个Map是不可以包含重复的key,一个key也最多关联到一个value;
接口方法总结:
Map接口类中定义了Entry内部接口,常常在遍历Map时用到;这里不做详细分析,后续会对其进行研究;
类型 | 方法 | 说明 |
添加元素 | put(K,V):V | 在Map中关联指定值到指定键 |
putAll(Map<? extends K, ? extends V>):void | 复制指定Map中的所有的键值对到Map中 | |
添加(特殊) | putIfAbsent(K,V):V | 如果指定的Key没有关联值,则插入键值对,否则返回值 |
computeIfAbsent(K,Function<? super K.? extends V>):V | 如果指定的Key没有关联值,则尝试用指定的方法计算出Value,将键值对插入Map | |
computeIfPresent(K,BiFunction<? super K,? super V,? extends V>):V | 如果指定的Key有关联值,且非空,则应用指定方法计算新Value,关联到该Key | |
compute(K,BiFunction<? super K,? super V,? extends V>):V | 根据指定Key和Value计算新的值,如果新值非空则将可以关联到新值,否则移除旧键值对 | |
merge(K,V,BiFunction<? super V,? extends V>):V | 合并插入 | |
替换 | replace(K,V):V | 将key关联到新值 |
replace(K,V,V):boolean | 如果Key关联到指定的值,则替换 | |
replaceAll(BiFunction<? super K,? super V, ? extends V>):void | 应用指定的方法,替换所有键值对 | |
删除 | remove(Object key):V | 移除指定Key的键值对 |
remove(Object, Object):boolean | 移除指定键值对 | |
clear():void | 清除Map | |
获取 | get(Object key):V | 返回指定key对应的值 |
KeySet():Set<K> | 获取所有Key的集合 | |
values():Collection<V> | 获取所有值的集合 | |
entrySet():Set<Enry<K,V>> | 获取所有键值对集合 | |
getOrDefault(Object,V):V | 返回指定Key关联的值,否则返回缺省值 | |
是否包含 | containsKey(Object):boolean | Map是否包含Key |
containsValue(Object):boolean | Map中是否包含值 | |
Map基础 | size():int | map大小 |
isEmpty():boolean | map是否空 | |
hashCode():int | map的Hash值 |
参考文献: