1_寫在前面

(一)為什么需要集合?

因?yàn)閿?shù)組無(wú)法滿足需求。

  • 1,數(shù)組長(zhǎng)度不可變
    我們可以用數(shù)組保存基本數(shù)據(jù)類型和引用類型,但是數(shù)組長(zhǎng)度是不可變的。如果一開(kāi)始我們想保存的數(shù)據(jù)長(zhǎng)度不明確,使用數(shù)組就會(huì)導(dǎo)致空間沒(méi)被用完或者后續(xù)要往里繼續(xù)添加數(shù)據(jù)時(shí)沒(méi)有空間了。

java集合只能存儲(chǔ)引用類型,不能存放基本數(shù)據(jù)類型。
一個(gè)集合和數(shù)組都只能存儲(chǔ)同一種類型的數(shù)據(jù)。

  • 2,數(shù)組無(wú)法保存具有映射關(guān)系的數(shù)據(jù)
    比如 冬瓜 - 5元/kg,白蘿卜 - 0.6元/kg,這種數(shù)據(jù)看起來(lái)像兩個(gè)存在關(guān)聯(lián)關(guān)系的數(shù)組,一個(gè)數(shù)組是蔬菜名稱數(shù)組,一個(gè)數(shù)組是對(duì)應(yīng)的價(jià)格數(shù)組。

由于集合就是用于保存數(shù)據(jù)的容器,所以集合類也稱為容器類。

(二)集合類始于兩個(gè)接口

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> {

    ...

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 日出日落,四季更迭,日復(fù)一日,年復(fù)一年。隨著光陰的流逝,一切都在發(fā)生著變化。對(duì)于“時(shí)間是什么”這一問(wèn)題的回...
    1021號(hào)時(shí)間線閱讀 584評(píng)論 2 1
  • 在iOS中程序的閃退大多是由于nil指針和內(nèi)存問(wèn)題導(dǎo)致的,內(nèi)存問(wèn)題現(xiàn)在有了ARC,并且內(nèi)存問(wèn)題無(wú)法定位,@try是...
    開(kāi)心一刻_閱讀 955評(píng)論 1 3
  • 一、會(huì)話概述 在日常生活中,從撥通電話到掛斷電話之間的一連串的你問(wèn)我答的過(guò)程就是一個(gè)會(huì)話。 Web應(yīng)用中的會(huì)話過(guò)程...
    WendyVIV閱讀 1,540評(píng)論 0 0
  • 使用CocoaPods后,發(fā)現(xiàn)總是找不到頭文件 在TARGETS -> Search Paths -> User ...
    左岸花不開(kāi)閱讀 386評(píng)論 0 0
  • 你 伸出手去試試么 天空的顏色 你感覺(jué)到么 你 閉上眼睛聆聽(tīng)么 愛(ài)人的呼喚 你在意么 你 打開(kāi)遙遠(yuǎn)的記憶么 那里的...
    霓裳依依閱讀 316評(píng)論 0 2

友情鏈接更多精彩內(nèi)容