Java 容器之 Stream
Stream 简介
在 Java8 中,Collection
新增了两个流方法,分别是 stream()
和 parallelStream()
。
Stream
相当于高级版的 Iterator
,他可以通过 Lambda 表达式对集合进行各种非常便利、高效的聚合操作(Aggregate Operation),或者大批量数据操作 (Bulk Data Operation)。
...大约 2 分钟
在 Java8 中,Collection
新增了两个流方法,分别是 stream()
和 parallelStream()
。
Stream
相当于高级版的 Iterator
,他可以通过 Lambda 表达式对集合进行各种非常便利、高效的聚合操作(Aggregate Operation),或者大批量数据操作 (Bulk Data Operation)。
Java 容器涉及许多数据结构知识点,所以设立专题进行总结。
Collection
、泛型
、Iterable
、Iterator
、Comparable
、Comparator
、Cloneable
、fail-fast
List
、ArrayList
、LinkedList
Map
、HashMap
、TreeMap
、LinkedHashMap
、WeakHashMap
Set
、HashSet
、TreeSet
、LinkedHashSet
、EmumSet
Queue
、Deque
、ArrayDeque
、LinkedList
、PriorityQueue
Queue
接口定义如下:
public interface Queue<E> extends Collection<E> {}
在 Java 中,同步容器主要包括 2 类:
Vector
、Stack
、Hashtable
Vector
- Vector
实现了 List
接口。Vector
实际上就是一个数组,和 ArrayList
类似。但是 Vector
中的方法都是 synchronized
方法,即进行了同步措施。Stack
- Stack
也是一个同步容器,它的方法也用 synchronized
进行了同步,它实际上是继承于 Vector
类。Hashtable
- Hashtable
实现了 Map
接口,它和 HashMap
很相似,但是 Hashtable
进行了同步处理,而 HashMap
没有。Collections
类中提供的静态工厂方法创建的类(由 Collections.synchronizedXXX
等方法)Java 中常用的存储容器就是数组和容器,二者有以下区别:
Map 家族主要成员功能如下:
Map
是 Map 容器家族的祖先,Map 是一个用于保存键值对(key-value)的接口。Map 中不能包含重复的键;每个键最多只能映射到一个值。AbstractMap
继承了 Map
的抽象类,它实现了 Map
中的核心 API。其它 Map
的实现类可以通过继承 AbstractMap
来减少重复编码。SortedMap
继承了 Map
的接口。SortedMap
中的内容是排序的键值对,排序的方法是通过实现比较器(Comparator
)完成的。NavigableMap
继承了 SortedMap
的接口。相比于 SortedMap
,NavigableMap
有一系列的“导航”方法;如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等。HashMap
继承了 AbstractMap
,但没实现 NavigableMap
接口。HashMap
的主要作用是储存无序的键值对,而 Hash
也体现了它的查找效率很高。HashMap
是使用最广泛的 Map
。Hashtable
虽然没有继承 AbstractMap
,但它继承了 Dictionary
(Dictionary
也是键值对的接口),而且也实现 Map
接口。因此,Hashtable
的主要作用是储存无序的键值对。和 HashMap 相比,Hashtable
在它的主要方法中使用 synchronized
关键字修饰,来保证线程安全。但是,由于它的锁粒度太大,非常影响读写速度,所以,现代 Java 程序几乎不会使用 Hashtable
,如果需要保证线程安全,一般会用 ConcurrentHashMap
来替代。TreeMap
继承了 AbstractMap
,且实现了 NavigableMap
接口。TreeMap
的主要作用是储存有序的键值对,排序依据根据元素类型的 Comparator
而定。WeakHashMap
继承了 AbstractMap
。WeakHashMap
的键是弱引用 (即 WeakReference
),它的主要作用是当 GC 内存不足时,会自动将 WeakHashMap
中的 key 回收,这避免了 WeakHashMap
的内存空间无限膨胀。很明显,WeakHashMap
适用于作为缓存。Set 家族成员简介:
Set
继承了 Collection
的接口。实际上 Set
就是 Collection
,只是行为略有不同:Set
集合不允许有重复元素。SortedSet
继承了 Set
的接口。SortedSet
中的内容是排序的唯一值,排序的方法是通过比较器(Comparator)。NavigableSet
继承了 SortedSet
的接口。它提供了丰富的查找方法:如"获取大于/等于某值的元素"、“获取小于/等于某值的元素”等等。AbstractSet
是一个抽象类,它继承于 AbstractCollection
,AbstractCollection
实现了 Set 中的绝大部分方法,为实现 Set
的实例类提供了便利。HashSet
类依赖于 HashMap
,它实际上是通过 HashMap
实现的。HashSet
中的元素是无序的、散列的。TreeSet
类依赖于 TreeMap
,它实际上是通过 TreeMap
实现的。TreeSet
中的元素是有序的,它是按自然排序或者用户指定比较器排序的 Set。LinkedHashSet
是按插入顺序排序的 Set。EnumSet
是只能存放 Emum 枚举类型的 Set。
List
是Collection
的子接口,其中可以保存各个重复的内容。
List
是一个接口,它继承于 Collection
的接口。它代表着有序的队列。
AbstractList
是一个抽象类,它继承于 AbstractCollection
。AbstractList
实现了 List
接口中除 size()
、get(int location)
之外的函数。