1_写在前面

(一)为什么需要集合?

因为数组无法满足需求。

  • 1,数组长度不可变
    我们可以用数组保存基本数据类型和引用类型,但是数组长度是不可变的。如果一开始我们想保存的数据长度不明确,使用数组就会导致空间没被用完或者后续要往里继续添加数据时没有空间了。

java集合只能存储引用类型,不能存放基本数据类型。
一个集合和数组都只能存储同一种类型的数据。

  • 2,数组无法保存具有映射关系的数据
    比如 冬瓜 - 5元/kg,白萝卜 - 0.6元/kg,这种数据看起来像两个存在关联关系的数组,一个数组是蔬菜名称数组,一个数组是对应的价格数组。

由于集合就是用于保存数据的容器,所以集合类也称为容器类。

(二)集合类始于两个接口

image.png

Collection和Map,它们是集合类的根接口。
其中Collection类还继承于Iterable接口。

1,Collection源码

public interface Collection<E> extends Iterable<E> {
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    Iterator<E> iterator();
    Object[] toArray();
    <T> T[] toArray(T[] a);

    boolean add(E e);

    boolean remove(Object o);

    boolean containsAll(Collection<?> c);

    boolean addAll(Collection<? extends E> c);

    boolean removeAll(Collection<?> c);

    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }

    boolean retainAll(Collection<?> c);

    void clear();

    boolean equals(Object o);

    int hashCode();

    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }

    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }
}

2,Iterable源码

public interface Iterable<T> {
    Iterator<T> iterator();

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

    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}

3,Map源码

public interface Map<K,V> {

    ...

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容