Java集合类框架

Java集合大致可分为Set、List和Map三种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合。Java 5之后,增加了Queue体系集合,代表一种队列集合实现。Java集合框架主要由Collection和Map两个根接口及其子接口、实现类组成。下图是Java集合类的框架图。

java部门层级递归查询 java类层次结构_java集合类和接口层次关系

java部门层级递归查询 java类层次结构_java集合类和接口层次关系_02

Collection类概述

通过框架图,我们可以清楚的看到各个集合的层次关系。其中,Collection类是Set, List, Queue类的父接口。基本接口主要包括了:接口说明boolean add(E e)添加元素

boolean addAll(Collection extends E> c)添加另一个Collection的所有元素
boolean remove(Object o)移除元素
boolean removeAll(Collection> c)从列表中移除指定collection中包含的所有元素
void clear()清除所有元素
boolean contains(Object o)是否包含指定元素
boolean containsAll(Collection> c)是否包含指定collection中包含的所有元素
Object[] toArray()将集合转换为数组
Iterator iterator()返回Iterator对象,用于遍历集合中的元素
Collection类继承了Iterable类。因此Collection类都可以通过Iterator接口或者是foreach循环来进行遍历。public interface Iterable {
Iterator iterator();
default void forEach(Consumer super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
...
}
Java集合类中迭代器—Iterator用来遍历Collection中的所有元素,其接口定义如下。public interface Iterator {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
}

迭代器是一种设计模式,该模式提供一种方法来顺序访问一个集合对象中各个元素, 而又无须暴露该对象的内部表示。迭代器简化了集合类的访问,同时为集合类的遍历提供了统一的接口。Java中的Iterator功能比较简单,并且只能单向移动。使用方法iterator()要求容器返回一个Iterator。

使用hasNext()检查序列中是否还有元素。

使用next()获得序列中的下一个元素。

可以使用remove()删除迭代器返回的元素。

Set接口

Set集合是一种不包括重复元素的Collection,无序,而判断两个对象是否相同则是根据equals方法,Set最多有一个null元素。需要注意的是,虽然Set中元素没有顺序,但是元素在set中的位置是由该元素的HashCode决定的,其具体位置其实是固定的。

List接口

List集合是一个包含了有序元素的Collection,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。所以与Set相比,List集合类增加了与索引位置相关的操作。接口说明void add(int index, E element)在指定的index位置添加元素

E set(int index, E element)设置指定的index位置的元素

int indexOf(Object o)返回指定元素第一次出现在列表中的索引位置,不存在则返回-1

int lastIndexOf(Object o)返回指定元素最后一次出现在列表中的索引位置,不存在则返回-1

boolean addAll(int index, Collection extends E> c)在指定的index位置插入制定集合中的多有元素

E remove(int index)移除指定位置的元素

List subList(int fromIndex, int toIndex);返回指定索引范围内的子List

Queue接口

Queue用于模拟队列这种数据结构,实现“FIFO”等数据结构。通常,队列不允许随机访问队列中的元素。

Map类概述

Map类以键值对(key-value)的形式存储元素,键值对是Map类的基本元素,一个映射不能包含重复的键,每个键最多只能映射一个值。Map类提供的基本接口主要有以下这些。接口说明V put(K key, V value)添加指定的key-value键值对

void putAll(Map extends K, ? extends V> m)添加指定的Map对象中所有键值对到当前Map

V get(Object key)根据指定的key值获取Value值

V replace(K key, V value)替换指定key值对应的Vaule值

boolean replace(K key, V oldValue, V newValue)替换指定key值和value值对应的键值对的Vaule值

V remove(Object key)移除指定key值的键值对

boolean remove(Object key, Object value)移除指定key值和value值的键值对

void clear()清空Map,移除所有包含的价值的

boolean containsKey(Object key)是否包含指定key值的键值对

boolean containsValue(Object value)是否包含指定valus值的键值对

Set keySet()以Set的形式返回所有的key值

Collection values()以Collection的形式返回所有的value值

Set> entrySet()以Set的形式返回所有的键值对