望远山,知近路,而后自得其乐!

Java集合类概述

Java集合类框架

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

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<E> iterator()返回Iterator对象,用于遍历集合中的元素

Collection类继承了Iterable类。因此Collection类都可以通过Iterator接口或者是foreach循环来进行遍历。

public interface Iterable<T> {
    Iterator<T> iterator();
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    ...
}

Java集合类中迭代器—Iterator用来遍历Collection中的所有元素,其接口定义如下。

public interface Iterator<E> {
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
}

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

  1. 使用方法iterator()要求容器返回一个Iterator。
  2. 使用hasNext()检查序列中是否还有元素。
  3. 使用next()获得序列中的下一个元素。
  4. 可以使用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<E> 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<K> keySet()以Set的形式返回所有的key值
Collection<V> values()以Collection的形式返回所有的value值
Set<Map.Entry<K, V>> entrySet()以Set的形式返回所有的键值对

文章评论已关闭!