Java集合容器框架

在这里插入图片描述

一、迭代器

迭代器(iterator),是确使用户可在容器对象(container,例如链表或数组)上遍访的对象,设计人员使用此接口无需关心容器对象的内存分配的实现细节。其行为很像数据库技术中的光标(cursor),迭代器最早出现在1974年设计的CLU编程语言中。

Java的迭代器(iterator)

  • 迭代器(Iterator)模式,又叫做游标模式,它的含义是,提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
  • Collection的顶层接口
  • 可迭代是java集合框架下的所有集合类的共性
  • 迭代器就是一个接口Iterator,实现了该接口的类就叫做可迭代类,这些类多数时候指的就是java.util包下的集合类。
public class IteratorDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        // 1、获取list的迭代器对象
        Iterator<String> it = list.iterator();
        //调用迭代器的hasNext方法,判断是否有下一个元素
        while (it.hasNext()) {
            //将迭代器的下标移动一位,并得到当前位置的元素值
            System.out.println(it.next());
        }
        // 2、foreach遍历、底层仍旧是iterator
        list.forEach(item -> System.out.println(item));
        list.forEach(item -> {
            if ("b".equals(item)) {
                System.out.println(item);
            }
        });
    }
}

二、Collection(单列集合)

  • 可选操作:子类可以不实现。
方法 (Method)描述 (Description)
int size()返回集合元素数(最大值:Integer.MAX_VALUE)
boolean isEmpty()集合不含任何元素,返回true
boolean contains(Object o)当且仅当这个集合包含至少一个元素e返回true(O == NULLé== NULL:o.equals(e)条)。
Iterator iterator()返回对此集合中的元素进行迭代的迭代器。
Object[] toArray();返回一个包含此集合中所有元素的数组。 如果此集合对由其迭代器返回其元素的顺序进行了任何保证,则此方法必须以相同的顺序返回元素。
T[] toArray(T[] a)返回包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型
boolean add(E e)如果此集合由于调用而发生更改,则返回true
boolean remove(Object o)更正式地,将删除元素e(O == NULLé== NULL:o.equals(e))的,如果该集合包含一个或多个这样的元件。 如果此集合包含指定的元素(或者等效地,如果此集合由于调用而更改),则返回true 。
boolean containsAll(Collection<?> c)如果此集合包含指定集合中的所有元素,则返回true
boolean addAll(Collection<? extends E> c);将指定集合中的所有元素添加到此集合中(可选操作)。
boolean removeAll(Collection<?> c);删除包含在指定集合中的所有此集合的元素(可选操作)
boolean retainAll(Collection c)把交集的结果存在当前集合中,不影响c
void clear()删除集合内所有元素(可选操作)
boolean equals(Object o)将指定的对象与此集合进行比较以获得相等性
int hashCode()返回此集合的哈希码值
default Spliterator spliterator()返回集合的Spliterator
default void forEach(Consumer<? super E>action)对Iterable的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。 除非实现类另有规定,否则按照迭代的顺序执行操作(如果指定了迭代顺序)
default Stream Stream()返回以此集合作为源的Stream

1. List接口

  • 实现类:ArrayList,LinkedList,Vector
  • 传送门

2. Set接口

  • 被HashSet类实现,被SortedSet接口继承,同时TreeSet类实现SortedSet接口,LinkedHashSet类继承HashSet类;
  • 传送门

3. Queue接口

3.1 源码

public interface Queue<E> extends Collection<E> {
    //将指定元素插入到队列的尾部(队列满了话,会抛出异常)
    boolean add(E e);

    //将指定元素插入此队列的尾部(队列满了话,会返回false)
    boolean offer(E e);

    //返回取队列头部的元素,并删除该元素(如果队列为空,则抛出异常)
    E remove();

    //返回队列头部的元素,并删除该元素(如果队列为空,则返回null)
    E poll();

    //返回队列头部的元素,不删除该元素(如果队列为空,则抛出异常)
    E element();

    //返回队列头部的元素,不删除该元素(如果队列为空,则返回null)
    E peek();
}

3.2 常见实现类

在Java中,ArrayDeque、LinkedList、PriorityQueue等类实现了Queue接口,模拟了队列的数据结构。

  • PriorityQueue:Queue的直接子类,线程不安全,不允许插入null元素,用“堆结构”来实现,支持优先级队列实现类。
  • ConcurrentLinkedQueue,ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue,DelayQueue,SynchronousQueue,LinkedBlockingDeque。

3.3 子接口:Deque接口

Deque支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

  • 此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。
常用方法
操作队头队尾
插入addFirst(e)/offerFirst(e)addLast(e)/offerLast(e)
移除removeFirst()/pollFirst()removeLast()/pollLast()
获取getFirst()/peekFirstgetLast()/peekLast()
和堆栈的联系
堆栈方法等效 Deque 方法
push(e)addFirst(e)
pop()removeFirst()
peek()peekFirst()

三、Map(双列集合)

将键映射到值的对象。 映射不能包含重复的键; 每个键最多可以映射到一个值。

方法 (Method)描述 (Description)
int size()返回此映射中的键值映射数
boolean isEmpty()如果此映射不包含键值映射,返回true
boolean containsKey(Object key)当且仅当此映射包含键k的映射,使得(key == null?k == null:key.equals(k))时,返回true 。
boolean containsValue(Object value)当且仅当此映射包含至少一个到值v的映射(值== null?v == null:value.equals(v))时,才返回true
V get(Object key)如果此映射包含从键k到值v的映射,使得(keynull ? knull : key.equals(k)) ,则此方法返回v ;否则,此方法返回v 。 否则返回null 。
V put(K key, V value)将指定值与该映射中的指定键相关联(可选操作)。
V remove(Object key)如果存在,则从此映射中删除键的映射(可选操作)
void putAll(Map<? extends K, ? extends V> m)将所有映射从指定映射复制到此映射(可选操作)。
void clear()从此映射中删除所有映射(可选操作)
Set keySet()返回此映射中包含的键的Set视图。返回值:
此地图中包含的键的设置视图
Collection values()返回此映射中包含的值的Collection视图
Set<Map.Entry<K, V>> entrySet()返回此映射中包含的映射的Set视图。返回值:
此地图中包含的映射的集合视图
boolean equals(Object o)如果m1.entrySet()。equals(m2.entrySet()) ,则两个映射m1和m2表示相同的映射
int hashCode()返回此映射的哈希码值。 映射的哈希码定义为映射的entrySet()视图中每个条目的哈希码之和
default V getOrDefault(Object key, V defaultValue)返回指定键所映射到的值;如果此映射不包含键的映射关系,则返回defaultValue
default void forEach(BiConsumer<? super K, ? super V> action)在此映射中为每个条目执行给定的操作,直到所有条目都已处理或该操作引发异常为止
default boolean remove(Object key, Object value)仅当当前映射到指定值时,才删除指定键的条目
default boolean replace(K key, V oldValue, V newValue)仅当当前映射到指定值时,才替换指定键的条目
  • 实现类:HashMap、HashTable,同时Propertise类继承HashTable。
  • 子接口:SortedMap,同时TreeMap类实现了SortedMap接口;
  • 传送门
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值