接下來(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)匪补。