Java集合(一)--集合框架簡(jiǎn)析

接下來(lái)的對(duì)Java的分析都是基于jdk1.8版本

在開發(fā)過(guò)程中肖粮,常常需要集中存放多個(gè)數(shù)據(jù)。我們知道丛晦,數(shù)組可以實(shí)現(xiàn)這個(gè)功能奕纫。但是,數(shù)組的長(zhǎng)度是固定的烫沙,如果我們存放的數(shù)據(jù)數(shù)量是動(dòng)態(tài)變化的該怎么辦匹层?這個(gè)時(shí)候,就要用到Java的集合類了锌蓄。

集合框架

所有的集合都位于java.util包下升筏。Java集合類有兩個(gè)主要的接口:Collection和Map。他們是集合的根接口瘸爽。在集合中您访,Map結(jié)尾的類實(shí)現(xiàn)了Map接口,而其他的集合類實(shí)現(xiàn)了Collection接口剪决。

集合框架圖

圖片來(lái)自:https://img-blog.csdn.net/20160124221843905

分析一下上圖:

1灵汪、Collection是一個(gè)接口,它包含了集合的基本操作和屬性柑潦。分為了List享言、Set和Queue三大分支。其中妒茬,List是一個(gè)有序的隊(duì)列担锤,其中的元素不唯一蔚晨。而Set是一個(gè)無(wú)序的集合乍钻,其中的元素是唯一的。

2铭腕、List的實(shí)現(xiàn)類有ArrayList银择、LinkedList、Vector及Stack累舷。

3浩考、Set的實(shí)現(xiàn)類有HashSet、TreeSet被盈、LinkedHashSet及EnumSet析孽。

4搭伤、Map也是一個(gè)接口,而且是一個(gè)映射接口袜瞬,值以鍵值對(duì)(key-value)的形式存儲(chǔ)怜俐。實(shí)現(xiàn)類有EnumMap、HashMap邓尤、TreeMap拍鲤、WeakHaskMap、ConcurrentHashMap及IdentityHashMap汞扎。

5季稳、Iteator是一個(gè)用來(lái)遍歷集合的工具,我們可以看到Collection接口就依賴于Iterabe接口澈魄,所以景鼠,在Collection的實(shí)現(xiàn)類中可以使用Iterator來(lái)遍歷元素。

接下來(lái)痹扇,就一個(gè)個(gè)看一下莲蜘。

Collection及其實(shí)現(xiàn)

Collection的定義及方法

Collection接口的定義如下:

public interface Collection<E> extends Iterable<E> {}

集合層次結(jié)構(gòu)中的根接口,JDK不提供此接口的任何直接實(shí)現(xiàn):它提供了更具體的子接口的實(shí)現(xiàn)帘营,如Set和List票渠。

包含的API如下:

Iterator<E> iterator();

int size();

boolean isEmpty();

Object[] toArray();

<T> T[] toArray(T[] a);

boolean add(E e);

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

boolean remove(Object o);

boolean removeAll(Collection<?> c);

boolean contains(Object o);

boolean containsAll(Collection<?> c);

boolean retainAll(Collection<?> c);

void clear();

boolean equals(Object o);

 int hashCode();

還有默認(rèn)方法

default boolean removeIf(Predicate<? super E> filter) {...}

//以下三個(gè)方法與Spliterator相關(guān)

default Spliterator<E> spliterator() {...}

default Stream<E> stream() {...}

default Stream<E> parallelStream() {...}

這些方法主要就是對(duì)元素的添加、刪除芬迄、比較和對(duì)集合的判空问顷、遍歷獲取大小等。

List接口的定義及其方法

List接口的定義如下:

public interface List<E> extends Collection<E> {}

List是一個(gè)有序集合禀梳。該接口的用戶可以精確控制列表中每個(gè)元素的插入位置杜窄。用戶可以通過(guò)整數(shù)索引(列表中的位置)訪問(wèn)元素并搜索列表中的元素。

因?yàn)槔^承于Collection接口算途,所以包含有其定義的所有方法塞耕,并且新增了部分方法,新增的方法如下:

E get(int index);

E set(int index, E element);

void add(int index, E element);

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

E remove(int index);

int indexOf(Object o);

int lastIndexOf(Object o);

ListIterator<E> listIterator();

ListIterator<E> listIterator(int index);

List<E> subList(int fromIndex, int toIndex);

及默認(rèn)方法

default void replaceAll(UnaryOperator<E> operator) {...}

default void sort(Comparator<? super E> c) {...}

//重寫Collection的默認(rèn)方法嘴瓤,主要是變了第二個(gè)參數(shù)扫外。

@Override

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

因?yàn)長(zhǎng)ist是有序的,可以根據(jù)角標(biāo)對(duì)其中的元素進(jìn)行操作廓脆。所以筛谚,List中增加了部分使用角標(biāo)操作數(shù)據(jù)的方法。

Set接口的定義及其方法

Set也是繼承于Collection的一個(gè)接口停忿,我們看一下它的定義:

public interface Set<E> extends Collection<E> {}

Set是一個(gè)不包含重復(fù)元素的集合驾讲。 集合中任意兩個(gè)元素 e1.equals(e2)必為false。并且最多只包含一個(gè)null元素。

和List一樣吮铭,Set也含有Collection定義的所有方法时迫,但是沒有新增方法,只重寫了一個(gè)默認(rèn)方法:

//也是只改變了第二個(gè)參數(shù)

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

AbstractCollection的定義及作用

定義如下:

public abstract class AbstractCollection<E> implements Collection<E> {}

AbstractCollection是一個(gè)抽象類谓晌,實(shí)現(xiàn)了Collection中除了iterator()和size()之外的函數(shù)别垮。它實(shí)現(xiàn)了Collection中其他集合類通用的方法,那么其他集合類(比如:AbstractList扎谎、AbstractSet及ArrayDeque)就可以通過(guò)繼承它來(lái)減少部分工作碳想。

AbstractList的定義及作用

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}

AbstractList是一個(gè)抽象類,實(shí)現(xiàn)了List中除了size()和get(int Location)之外的函數(shù)毁靶。它是為了方便隨機(jī)訪問(wèn)數(shù)據(jù)的集合(比如:AbstractSequentialList胧奔、ArrayList等)實(shí)現(xiàn)List。

AbstractSequentialList的定義及作用

public abstract class AbstractSequentialList<E> extends AbstractList<E> {}

繼承于AbstractList预吆,實(shí)現(xiàn)了其get(int index)等方法龙填。為了方便順序訪問(wèn)數(shù)據(jù)的集合(如LinkedList)實(shí)現(xiàn)List。

AbstractSet的定義及其作用

定義如下:

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}

AbstractSet是一個(gè)抽象類拐叉,實(shí)現(xiàn)了equals(Object c)岩遗、hashCode()和removeAll(Collection<?> c)()方法。它是為了方便其他的類實(shí)現(xiàn)Set凤瘦。

Queue的定義及方法

定義如下:

public interface Queue<E> extends Collection<E> {}

隊(duì)列宿礁,用于在處理前保持元素的集合。 除了有基本的集合操作外蔬芥,隊(duì)列還提供插入梆靖,提取和檢查操作。它的方法有:

//如果可以在不違反容量限制的情況下立即執(zhí)行此操作笔诵,則將指定的元素插入此隊(duì)列返吻,成功時(shí)返回true,如果當(dāng)前沒有空間乎婿,則拋出IllegalStateException
boolean add(E e);

//如果可以在不違反容量限制的情況下立即執(zhí)行此操作测僵,則將指定的元素插入此隊(duì)列。 使用容量限制隊(duì)列時(shí)谢翎,此方法通常優(yōu)于add()捍靠,只能通過(guò)拋出異常來(lái)插入元素。
boolean offer(E e);

//檢索并刪除此隊(duì)列的頭部岳服。 此方法與poll()的不同之處僅在于剂公,如果此隊(duì)列為空,則會(huì)拋出異常吊宋。
E remove();

//檢索并刪除此隊(duì)列的頭部,如果此隊(duì)列為空,則返回null璃搜。
E poll();

//檢索但不刪除此隊(duì)列的頭部拖吼。 此方法與 peek()的區(qū)別僅在于,如果此隊(duì)列為空这吻,則拋出異常吊档。
E element();

//檢索但不移除此隊(duì)列的頭部,如果此隊(duì)列為空唾糯,則返回null怠硼。
E peek();

Deque的定義及方法

定義如下:

public interface Deque<E> extends Queue<E> {}

Deque是一種線性集合,支持兩端插入和移除元素移怯。此接口支持限制容量大小的隊(duì)列以及不限制容量大小的隊(duì)列香璃。除了Queue的方法外,還有以下方法

//容量允許的情況下舟误,在隊(duì)列的開頭插入元素葡秒。如果沒有空間,則拋出IllegalStateException異常嵌溢。
void addFirst(E e);

//將指定元素插入此雙端隊(duì)列的前面眯牧,除非它違反容量限制。 使用容量限制的雙端隊(duì)列時(shí)赖草,此方法通常優(yōu)于addFirst()方法
boolean offerFirst(E e);

//容量允許的情況下学少,在隊(duì)列的末尾插入元素。如果沒有空間秧骑,則拋出IllegalStateException異常旱易。
void addLast(E e);

//在此雙端隊(duì)列的末尾插入指定的元素,除非它違反容量限制腿堤。 使用容量限制的雙端隊(duì)列時(shí)阀坏,此方法通常優(yōu)于addLast()方法
boolean offerLast(E e);

//檢索并刪除此雙端隊(duì)列的第一個(gè)元素。如果此雙端隊(duì)列為空笆檀,則會(huì)拋出異常忌堂。
E removeFirst();

//檢索并刪除此雙端隊(duì)列的第一個(gè)元素,如果此雙端隊(duì)列為空酗洒,則返回null士修。
E pollFirst();

//檢索并刪除此雙端隊(duì)列的最后一個(gè)元素。 如果此雙端隊(duì)列為空樱衷,則會(huì)拋出異常棋嘲。
E removeLast();

//檢索并刪除此雙端隊(duì)列的最后一個(gè)元素,如果此雙端隊(duì)列為空矩桂,則返回null沸移。
E pollLast();

//檢索此雙端隊(duì)列的第一個(gè)元素。如果隊(duì)列為空,則拋出異常
E getFirst();

//檢索此雙端隊(duì)列的第一個(gè)元素雹锣,如果此雙端隊(duì)列為空网沾,則返回null。
E peekFirst();

//檢索此雙端隊(duì)列的最后一個(gè)元素蕊爵。如果隊(duì)列為空辉哥,則拋出異常
E getLast();

//檢索此雙端隊(duì)列的最后一個(gè)元素,如果此雙端隊(duì)列為空攒射,則返回null醋旦。
E peekLast();

//從此雙端隊(duì)列中刪除指定元素的第一個(gè)匹配項(xiàng)。如果雙端隊(duì)列不包含該元素会放,則不會(huì)更改饲齐。 如果有,刪除第一個(gè)與o相同的元素鸦概,并返回true箩张。
boolean removeFirstOccurrence(Object o);

//從此雙端隊(duì)列中刪除指定元素的最后一個(gè)匹配項(xiàng)。如果雙端隊(duì)列不包含該元素窗市,則不會(huì)更改先慷。 如果有,刪除最后一個(gè)與o相同的元素咨察,并返回true论熙。
boolean removeLastOccurrence(Object o);

//如果可以在不違反容量限制的情況下立即執(zhí)行此操作,則將指定的元素插入此雙端隊(duì)列的尾部摄狱,成功時(shí)返回true脓诡,如果當(dāng)前沒有空間可用,拋出IllegalStateException異常媒役。
boolean add(E e);

//如果可以在不違反容量限制的情況下立即執(zhí)行此操作祝谚,則將指定的元素插入此雙端隊(duì)列的尾部,成功時(shí)返回true酣衷,如果當(dāng)前沒有空間可用交惯,返回false。
boolean offer(E e);

//檢索并刪除此雙端隊(duì)列的頭部穿仪。如果此雙端隊(duì)列為空席爽,則會(huì)拋出異常。
E remove();

//檢索并刪除此雙端隊(duì)列的頭部啊片。如果此雙端隊(duì)列為空只锻,則返回null
E poll();

//檢索此雙端隊(duì)列的頭部。如果此雙端隊(duì)列為空紫谷,則會(huì)拋出異常齐饮。
E element();

//檢索此雙端隊(duì)列的頭部捐寥。如果此雙端隊(duì)列為空,則返回null沈矿。
E peek();

//如果可以在不違反容量限制的情況下立即執(zhí)行此操作上真,則將元素推送到此雙端隊(duì)列的頭部咬腋,如果當(dāng)前沒有可用空間則拋出IllegalStateException異常羹膳。
void push(E e);

//刪除并返回此雙端隊(duì)列的第一個(gè)元素。
E pop();

//從此雙端隊(duì)列中刪除第一次出現(xiàn)的指定元素根竿。 如果隊(duì)列不包含該元素陵像,則它將保持不變。如果有寇壳,刪除第一次出現(xiàn)的指定元素并返回true醒颖。
boolean remove(Object o);

//如果此雙端隊(duì)列包含指定的元素,則返回true
boolean contains(Object o);

//反回隊(duì)列中的元素個(gè)數(shù)
 int size();

//返回隊(duì)列的迭代器壳炎,元素從頭部到尾部順序返回
Iterator<E> iterator();

//以相反的順序返回此雙端隊(duì)列中元素的迭代器泞歉,元素從尾部到頭部順序返回
Iterator<E> descendingIterator();

Iterator及其實(shí)現(xiàn)

Iterator的方法及作用

Iterator是一個(gè)泛型接口,包含4個(gè)方法:

public interface Iterator<E>{

E next();

boolean hasNext();

void remove();

default void forEachRemaining(Consumer <? super E> action);

}

通過(guò)反復(fù)調(diào)用next方法匿辩,可以逐個(gè)訪問(wèn)集合中的每個(gè)元素腰耙。但是,到達(dá)集合末尾铲球,next將拋出一個(gè)NoSuchElementException挺庞。因此,需要在調(diào)用next之前調(diào)用hasNext方法來(lái)判斷是否有下一個(gè)元素稼病。

在Java SE 8中可以調(diào)用forEachRemaining方法选侨,并提供一個(gè)lambda表達(dá)式來(lái)遍歷集合。

元素被訪問(wèn)的順序取決于集合的類型然走。如果對(duì)ArrayList進(jìn)行迭代援制,迭代器將從索引0開始,每迭代一次芍瑞,索引值加一晨仑。然而,如果訪問(wèn)HashSet啄巧,每個(gè)元素將按照某種隨機(jī)的次序出現(xiàn)寻歧,我們無(wú)法預(yù)知元素被訪問(wèn)的次序。

Java的迭代器是位于兩個(gè)元素之間的秩仆,當(dāng)調(diào)用next時(shí)码泛,迭代器就越過(guò)下一個(gè)元素,并返回那個(gè)元素的引用澄耍。

Iterator接口的remove方法將會(huì)刪除剛剛越過(guò)的元素噪珊。而且晌缘,不能連續(xù)調(diào)用remove方法,應(yīng)該在remove方法中間使用next方法痢站,讓其越過(guò)元素磷箕。

ListIterator的方法及作用

定義如下:

public interface ListIterator<E> extends Iterator<E> {}

它繼承于Iterator,用來(lái)遍歷List阵难,允許程序員在任一方向遍歷列表岳枷,在迭代期間修改列表,并獲取迭代器在列表中的當(dāng)前位置呜叫。它沒有當(dāng)前元素空繁,光標(biāo)總是位于以遍歷過(guò)的元素和下一個(gè)元素之間。除了Iterator的方法外朱庆,他還有自己的方法盛泡。

//反向遍歷列表的時(shí)候,如果有元素娱颊,則返回true(光標(biāo)前面是否有元素)
boolean hasPrevious();

/**返回列表中的上一個(gè)元素并向后移動(dòng)光標(biāo)位置傲诵。 可以重復(fù)調(diào)用此方法以向后遍歷列表,或者與對(duì)next()的調(diào)用混合以來(lái)回傳遞箱硕。 (請(qǐng)注意拴竹,對(duì)next()和previous()的交替調(diào)用將重復(fù)返回相同的元素。
**/
E previous();

//返回后續(xù)調(diào)用next()將返回的元素的索引,如果列表迭代器位于列表的末尾颅痊,則返回列表大小殖熟。
int nextIndex();

//返回后續(xù)調(diào)用previous()將返回的元素的索引。(如果列表迭代器位于列表的開頭斑响,則返 回-1菱属。)
int previousIndex();

//用指定的元素替換next()或previous()返回的最后一個(gè)元素(可選操作)。 只有在最后一次調(diào)用 next()或previous()后才調(diào)用remove()和add()舰罚,才能進(jìn)行此調(diào)用纽门。
void set(E e);

//將指定的元素插入列表(可選操作)。 該元素緊接在link #next()返回的元素之前插入(如果有)营罢,并且在previous()返回的元素之后插入赏陵,如果有的話。 (如果列表中不包含任何元素饲漾,則新元素將成為列表中的唯一元素蝙搔。)新元素將插入隱式游標(biāo)之前:next()的后續(xù)調(diào)用不受影響,隨后調(diào)用previous()將返回新元素考传。
void add(E e);

Map及其實(shí)現(xiàn)

Map的定義及方法

定義如下:

public interface Map<K, V> {}

Map是一個(gè)鍵值對(duì)映射接口吃型。Map中不能包含重復(fù)的鍵,每個(gè)鍵也只能映射一個(gè)值僚楞。

Map的方法:

int size();

boolean isEmpty();

boolean containsKey(Object key);

boolean containsValue(Object value);

V get(Object key);

V put(K key, V value);

V remove(Object key);

void putAll(Map<? extends K, ? extends V> m);

void clear();

Set<K> keySet();

Collection<V> values();

Set<Map.Entry<K, V>> entrySet();

boolean equals(Object o);

int hashCode();

以及默認(rèn)方法

default V getOrDefault(Object key, V defaultValue){}

default void forEach(BiConsumer<? super K, ? super V> action){}

default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function){}

default V putIfAbsent(K key, V value){}

default boolean remove(Object key, Object value){}

default boolean replace(K key, V oldValue, V newValue){}

default V replace(K key, V value){}

default V computeIfAbsent(K key,
            Function<? super K, ? extends V> mappingFunction){}

default V computeIfPresent(K key,
            BiFunction<? super K, ? super V, ? extends V> remappingFunction){}

default V compute(K key,
            BiFunction<? super K, ? super V, ? extends V> remappingFunction){}

default V merge(K key, V value,
            BiFunction<? super V, ? super V, ? extends V> remappingFunction){}

Map的方法用來(lái)返回鍵集勤晚、值集以及鍵跟值的映射關(guān)系枉层。且提供了判空、清除及刪除等操作赐写。

Map.Entry的定義及方法

定義如下:

interface Entry<K, V> {}

這是Map內(nèi)部的一個(gè)接口鸟蜡,輔助Map的部分方法。Entry的方法有:

K getKey();

V getValue();

V setValue(V value);

boolean equals(Object o);

int hashCode();

還有部分默認(rèn)方法

public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K, V>> comparingByKey(){}

public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K, V>> comparingByValue(){}

public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp){}

public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp){}

AbstractMap定義及方法

定義如下:

public abstract class AbstractMap<K,V> implements Map<K,V> {}

此類實(shí)現(xiàn)了Map除entrySet()外的所有方法挺邀。內(nèi)部有一個(gè)抽象類SimpleEntry繼承了Entry做輔助工作揉忘。此類還有自己的方法:

//返回一個(gè)克隆副本,但是值跟鍵都是null
protected Object clone() throws CloneNotSupportedException {}

//SimpleEntry和SimpleImmutableEntry的實(shí)用方法悠夯。 測(cè)試是否相等癌淮,檢查空值躺坟。
private static boolean eq(Object o1, Object o2) {}

ConcurrentMap的定義與方法

定義如下:

public interface ConcurrentMap<K,V> extends Map<K,V> {}

它的實(shí)現(xiàn)類可以為線程提供安全性和原子性保證沦补。其實(shí)就是線程安全。它的方法如下:

V putIfAbsent(K key, V value);

boolean remove(Object key, Object value);

boolean replace(K key, V oldValue, V newValue);

V replace(K key, V value);

還有默認(rèn)方法

default V getOrDefault(Object key, V defaultValue){}

default void forEach(BiConsumer<? super K, ? super V> action){}

default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function){}

default V computeIfAbsent(K key,
            Function<? super K, ? extends V> mappingFunction){}

default V computeIfPresent(K key,
            BiFunction<? super K, ? super V, ? extends V> remappingFunction){}

default V compute(K key,
                      BiFunction<? super K, ? super V, ? extends V> remappingFunction){}

default V merge(K key, V value,
            BiFunction<? super V, ? super V, ? extends V> remappingFunction){}

ConcurrentMap提供線程安全性和原子性保證的映射咪橙。

內(nèi)存一致性效果:與其他并發(fā)集合一樣夕膀,在將對(duì)象作為鍵或值放入ConcurrentMap之前的線程中的操作發(fā)生在從另一個(gè)線程中的ConcurrentMap訪問(wèn)或刪除該對(duì)象之后的操作之前。

SortedMap定義及方法

定義如下:

public interface SortedMap<K,V> extends Map<K,V> {}

SortedMap接口主要提供有序的Map實(shí)現(xiàn)美侦。它按照自然順序或指定的比較器對(duì)鍵進(jìn)行排序,它的實(shí)現(xiàn)類是TreeMap产舞。它的方法如下:

Comparator<? super K> comparator();

SortedMap<K,V> subMap(K fromKey, K toKey);

SortedMap<K,V> headMap(K toKey);

SortedMap<K,V> tailMap(K fromKey);

K firstKey();

K lastKey();

Set<K> keySet();

Collection<V> values();

Set<Map.Entry<K, V>> entrySet();

NavigableMap的定義及方法

定義如下:

public interface NavigableMap<K,V> extends SortedMap<K,V> {}

NavigableMap擴(kuò)展了 SortedMap,具有了針對(duì)給定搜索目標(biāo)返回最接近匹配項(xiàng)的導(dǎo)航方法菠剩。方法 lowerEntry易猫、floorEntry、ceilingEntry 和 higherEntry 分別返回與小于具壮、小于等于准颓、大于等于、大于給定鍵的鍵關(guān)聯(lián)的 Map.Entry 對(duì)象棺妓,如果不存在這樣的鍵攘已,則返回 null。類似地怜跑,方法 lowerKey样勃、floorKey、ceilingKey 和 higherKey 只返回關(guān)聯(lián)的鍵性芬。所有這些方法是為查找條目而不是遍歷條目而設(shè)計(jì)的峡眶。它的方法如下:

Map.Entry<K,V> lowerEntry(K key);
 
K lowerKey(K key);
 
Map.Entry<K,V> floorEntry(K key);
 
K floorKey(K key);
 
Map.Entry<K,V> ceilingEntry(K key);
 
Map.Entry<K,V> ceilingEntry(K key);
 
K higherKey(K key);

Map.Entry<K,V> firstEntry();

Map.Entry<K,V> lastEntry();

Map.Entry<K,V> pollFirstEntry();

Map.Entry<K,V> pollLastEntry();

NavigableMap<K,V> descendingMap();

NavigableSet<K> navigableKeySet();

NavigableSet<K> descendingKeySet();

NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive,K toKey,   boolean toInclusive);
 
NavigableMap<K,V> headMap(K toKey, boolean inclusive);
                             
NavigableMap<K,V> tailMap(K fromKey, boolean inclusive);
 
SortedMap<K,V> subMap(K fromKey, K toKey); 

SortedMap<K,V> headMap(K toKey);

SortedMap<K,V> tailMap(K fromKey);                             

Dictionary的定義及方法

定義如下:

public abstract class Dictionary<K,V> {}

是任何類的抽象父類,例如Hashtable植锉,它將鍵映射到值辫樱。 每個(gè)鍵和每個(gè)值都是一個(gè)對(duì)象。 在任何一個(gè)Dictionary 對(duì)象中汽煮,每個(gè)鍵最多與一個(gè)值相關(guān)聯(lián)搏熄。 給定Dictionary 和一個(gè)鍵棚唆,可以查找關(guān)聯(lián)的元素。 任何非null對(duì)象都可以用作鍵和值心例。通常宵凌,此類的實(shí)現(xiàn)應(yīng)使用equals方法來(lái)確定兩個(gè)鍵是否相同。

它的方法有:

//返回字典中元素的個(gè)數(shù)
abstract public int size();

//當(dāng)且僅當(dāng)此字典不包含任何條目時(shí)止后,結(jié)果為true瞎惫。
abstract public boolean isEmpty();

//返回此字典中的所有鍵
abstract public Enumeration<K> keys();

//返回此字典中的所有值
abstract public Enumeration<V> elements();

//返回鍵在此字典中映射到的值。
abstract public V get(Object key);

//將指定的鍵映射到此字典中指定的值译株。鍵和值都不能是null
abstract public V put(K key, V value);

//從此字典中刪除鍵值對(duì)
abstract public V remove(Object key);

好了瓜喇,本文就分析到這。本文的主旨是了解集合框架中比較重要的接口和類歉糜,并對(duì)它們所含的方法留有印象乘寒。在本文中沒有注釋的方法的作用,會(huì)在之后的其他文章中有所體現(xiàn)匪补。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伞辛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子夯缺,更是在濱河造成了極大的恐慌蚤氏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踊兜,死亡現(xiàn)場(chǎng)離奇詭異竿滨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)捏境,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門于游,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人典蝌,你說(shuō)我怎么就攤上這事曙砂。” “怎么了骏掀?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵鸠澈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我截驮,道長(zhǎng)笑陈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任葵袭,我火速辦了婚禮涵妥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坡锡。我一直安慰自己蓬网,他們只是感情好窒所,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帆锋,像睡著了一般吵取。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锯厢,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天皮官,我揣著相機(jī)與錄音,去河邊找鬼实辑。 笑死捺氢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剪撬。 我是一名探鬼主播摄乒,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婿奔!你這毒婦竟也來(lái)了缺狠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萍摊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后如叼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冰木,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年笼恰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踊沸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡社证,死狀恐怖逼龟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情追葡,我是刑警寧澤腺律,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站宜肉,受9級(jí)特大地震影響匀钧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谬返,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一之斯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遣铝,春花似錦佑刷、人聲如沸莉擒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啰劲。三九已至,卻和暖如春檀何,著一層夾襖步出監(jiān)牢的瞬間蝇裤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工频鉴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栓辜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓垛孔,卻偏偏與公主長(zhǎng)得像藕甩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子周荐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349